Добавить QColorDialog к QHBoxLayout - PullRequest
1 голос
/ 04 октября 2019

Я пытаюсь создать графический редактор, в котором вы можете выбрать цвет с правой стороны и отредактировать изображение с левой стороны экрана. Поэтому мне нужен 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 Ответ

0 голосов
/ 04 октября 2019

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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...