PyQt5: Tidak Ada Dialog Isi Warna?

Saya mengkode GUI di PyQt5, di mana saya memerlukan pemilih warna. Sejauh ini, saya menggunakan Kelas QColorDialog, yang berfungsi dengan baik untuk memilih warna - tetapi masalah saya adalah sepertinya tidak ada cara untuk memilih "tanpa warna" (atau "tanpa isi", seperti yang diketahui dari PowerPoint atau Adobe Illustrator) .

Bagaimana cara mencapai untuk memilih "tanpa warna"? (Dokumentasi hanya menyebutkan tanda untuk transparansi, tapi ini tidak membantu saya...)


person Luigi_Papardelle    schedule 14.02.2016    source sumber
comment
Dialog warna menentukan QColor. Jadi, apa yang menurut Anda QColor sama dengan tanpa isi, dan apa bedanya dengan transparan sepenuhnya?   -  person ekhumoro    schedule 14.02.2016
comment
Mungkin ada gunanya jika saya menjelaskan lebih detail apa yang saya butuhkan: Ketika pengguna memilih warna, dialog ditutup dan latar belakang tombol diatur ke warna itu, untuk menunjukkan warna apa yang dipilih. Jika pengguna tidak menginginkan warna, saya ingin memiliki opsi seperti di ilustrator, di mana Anda mengklik ikon putih dengan garis merah tebal yang berarti tanpa isian. Saya dapat membayangkan melakukan solusi dengan transparansi, tetapi menurut saya dari segi kegunaan, ini adalah konstruksi yang buruk. Plus: saya mencoba mengatur ShowAlphaChannel-Flag, tetapi Dialognya terlihat seperti sebelumnya? Bukankah seharusnya ada kolom atau penggeser untuk transparansi?   -  person Luigi_Papardelle    schedule 15.02.2016
comment
Anda tidak menjawab pertanyaan saya sama sekali, jadi saya masih tidak tahu apa yang seharusnya dilakukan tanpa pengisian. Tidak ada pepatah bagus seperti di Illustrator - tidak semua orang menggunakan Windows, dan mereka yang menggunakannya mungkin belum pernah menggunakan program seperti itu. Mengenai tanda saluran alfa: Saya berasumsi Anda menggunakan dialog warna asli Windows, yang tampaknya tidak memiliki fasilitas untuk menampilkan saluran alfa. Jika Anda mengatur opsi ShowAlphaChannel|DontUseNativeDialog, itu akan ditampilkan.   -  person ekhumoro    schedule 15.02.2016
comment
PS: Saya juga harus bertanya - mengapa pengguna perlu membuka dialog warna, jika mereka sebenarnya tidak menginginkan warna? Membaca yang tersirat, saya kira apa yang sebenarnya ingin Anda lakukan adalah mengatur ulang beberapa pengaturan warna ke nilai defaultnya. Artinya, Anda ingin mengizinkan pengguna untuk menghapus pengaturan warna saat ini. Saya pikir cara yang benar untuk melakukan ini adalah dengan menyediakan item menu Reset Default yang eksplisit (atau apa pun), daripada mencoba memaksa dialog warna untuk melakukan sesuatu yang tidak dirancang untuknya.   -  person ekhumoro    schedule 15.02.2016
comment
@ekhumoro Ah, maaf, saya tidak memikirkan itu. Jadi, yang dapat saya gunakan adalah jika tanpa isian dipilih, nilai seperti -1 (atau kode lainnya, tetapi bukan warna rgb yang valid), akan dikembalikan - maka saya dapat menanganinya kasus dalam kode saya, mengetahui bahwa tidak ada pengisian yang diinginkan. Saya juga mencoba DontUseNativeDialog, tetapi tidak ada perubahan. Saat saya menguji pengaturan saya dengan testOption(), ia mengevaluasi Benar - sehingga Bendera/Opsi tampaknya disetel dengan benar. Mungkin ini bug di pyqt5?   -  person Luigi_Papardelle    schedule 15.02.2016
comment
Bugnya ada di kode Anda, bukan pyqt5. Ini berfungsi dengan baik dengan opsi yang saya tentukan dalam komentar saya di atas.   -  person ekhumoro    schedule 15.02.2016
comment
Oke, jika milik Anda berfungsi, saya akan mencoba mencari tahu apa yang salah di sana. Bagaimanapun, saya ingin menghindari membuat Tombol Kembalikan Default tambahan, tapi sepertinya tidak ada pilihan lain selain ini. Terima kasih atas bantuan Anda!   -  person Luigi_Papardelle    schedule 15.02.2016
comment
Jika Anda tidak keberatan menggunakan dialog warna non-asli, Anda dapat membuat versi khusus dengan beberapa tombol tambahan. Saya akan segera memposting contohnya.   -  person ekhumoro    schedule 15.02.2016


Jawaban (1)


Jika Anda tidak keberatan menggunakan dialog non-pribumi, cukup mudah untuk menyesuaikannya.

Di bawah ini adalah implementasi yang sangat mendasar yang menunjukkan cara menyematkan dialog yang ada, dan menambahkan tombol tambahan "Tanpa Warna" di bagian bawah. Implementasi selanjutnya dibiarkan sebagai latihan untuk pembaca...

from PyQt5 import QtCore, QtWidgets

class ColorDialog(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)
        widget = QtWidgets.QColorDialog()
        widget.setWindowFlags(QtCore.Qt.Widget)
        widget.setOptions(
            QtWidgets.QColorDialog.DontUseNativeDialog |
            QtWidgets.QColorDialog.NoButtons)
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(widget)
        hbox = QtWidgets.QHBoxLayout()
        hbox.addWidget(QtWidgets.QPushButton('No Color'))
        hbox.addWidget(QtWidgets.QPushButton('Cancel'))
        hbox.addWidget(QtWidgets.QPushButton('Ok'))
        layout.addLayout(hbox)

if __name__ == '__main__':

    import sys
    app = QtWidgets.QApplication(sys.argv)
    dialog = ColorDialog()
    dialog.show()
    sys.exit(app.exec_())
person ekhumoro    schedule 15.02.2016