Добавить QColorDialog в QHBoxLayout
Я пытаюсь создать редактор изображений, в котором вы можете выбрать свой цвет с правой стороны и отредактировать изображение с левой стороны экрана. Поэтому мне нужен QHBoxLayout, чтобы установить два окна рядом. Я не могу добавить свой ColorDialog в QHBoxLayout. Для теста я использовал кнопку вместо картинки.
Я устал добавлять ColorDialog с.addWidget, но это не сработало. ColorDialog все еще отображается, но без кнопки сбоку.
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
color = QColorDialog.getColor()
horizontalbox = QHBoxLayout
cancelbutton = QPushButton("CancelButton")
horizontalbox.addWidget(cancelbutton)
horizontalbox.addWidget(color)
self.setLayout(horizontalbox)
self.show()
1 ответ
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())