我正在尝试创建图片编辑器,您可以在其中选择颜色,然后在屏幕左侧编辑图片。
因此,我需要一个QHBoxLayout来并排设置两个窗口。我无法将我的ColorDialog添加到QHBoxLayout。为了测试目的,我使用按钮代替了图片。
我厌倦了用.addWidget添加ColorDialog,但是没有用。
仍然显示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()
最佳答案
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())