QColorDialog.getColor () - статический метод, только возвращает, что выбранный QColor не позволяет получить виджет, поэтому вы не должны использовать этот метод, но вы должны создать объект класса QColorDialog, как я покажу ниже.
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
colordialog = QColorDialog()
colordialog.setOptions(QColorDialog.DontUseNativeDialog)
colordialog.currentColorChanged.connect(self.on_color_changed)
cancelbutton = QPushButton("CancelButton")
horizontalbox = QHBoxLayout(self)
horizontalbox.addWidget(cancelbutton)
horizontalbox.addWidget(colordialog)
self.show()
def on_color_changed(self, color):
print(color)
Обновление:
QColorDialog - это диалоговое окно, предопределенное поведение которого - закрывать окно, поэтому одним из возможных решений является отключение сигнала нажатием кнопки и получение цвета после нажатия. используйте сигнал щелчка, подключенный к другому слоту. Я также вижу, что кнопка отмены QColorDialog не нужна из-за того, что я скрыл.
def initUI(self):
self.colordialog = QColorDialog()
self.colordialog.setOptions(QColorDialog.DontUseNativeDialog)
button_box = self.colordialog.findChild(QtWidgets.QDialogButtonBox)
ok_button = button_box.button(QDialogButtonBox.Ok)
ok_button.disconnect()
ok_button.clicked.connect(self.on_ok_button_clicked)
# hide cancelbutton
cancel_button = button_box.button(QDialogButtonBox.Cancel)
cancel_button.hide()
cancelbutton = QPushButton("CancelButton")
horizontalbox = QHBoxLayout(self)
horizontalbox.addWidget(cancelbutton)
horizontalbox.addWidget(self.colordialog)
self.show()
def on_ok_button_clicked(self):
color = self.colordialog.currentColor()
print(color.name())