Как я могу запустить окно QColorDialog при запуске QMainWindow? - PullRequest
0 голосов
/ 06 ноября 2018

Используя PyQt5, я хотел бы использовать виджет QColorDialog, чтобы получить цвет, но продолжайте работать с QMainWindow, чтобы любые изменения цвета мгновенно обновлялись в основном графическом интерфейсе. Пользователю не нужно было бы нажимать «ОК», чтобы отправить новый цвет в основной графический интерфейс - он будет постоянно обновляться, чтобы соответствовать тому цвету, который в данный момент находится в подокне. Возможно ли это с помощью QColorDialog?

1 Ответ

0 голосов
/ 06 ноября 2018

Вы можете получить цвет, который щелкает по палитре, только если вы используете QColorDialog в Qt, а не в каждой операционной системе, поэтому вы должны установить параметры с помощью QColorDialog::DontUseNativeDialog:

from PyQt5 import QtCore, QtGui, QtWidgets

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        central_widget = QtWidgets.QWidget()
        self.setCentralWidget(central_widget)

        button = QtWidgets.QPushButton("Open QColorDialog")
        self.label = QtWidgets.QLabel("Background", alignment=QtCore.Qt.AlignCenter)
        self.label.setAutoFillBackground(True)
        lay = QtWidgets.QVBoxLayout(central_widget)
        lay.addWidget(button)
        lay.addWidget(self.label)

        self.color_dialog = QtWidgets.QColorDialog(self)
        self.color_dialog.setOptions(QtWidgets.QColorDialog.DontUseNativeDialog |
                                     QtWidgets.QColorDialog.NoButtons)
        self.color_dialog.currentColorChanged.connect(self.on_currentColorChanged)
        button.clicked.connect(self.color_dialog.show)

    @QtCore.pyqtSlot(QtGui.QColor)
    def on_currentColorChanged(self, color):
        pal = self.label.palette()
        pal.setColor(QtGui.QPalette.Background, color)
        self.label.setPalette(pal)
        # or
        # self.label.setStyleSheet("background-color: {}".format(color.name()))

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.resize(640, 480)
    w.show()
    sys.exit(app.exec_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...