1

我在使用 pyside2 时遇到问题。我需要实现一个颜色选择器,当我选择一种颜色时,将该颜色可视化为一个小方块。

我已经完成了这样的颜色选择器:

color = QtWidgets.QColorDialog.getColor()

但我不知道如何制作一个正方形(它应该是一个标签?)并用选定的颜色给它上色。

4

1 回答 1

2

如果可以使用QLabel, 来更改背景颜色QPalette,则使用:

from PySide2 import QtWidgets, QtGui, QtCore

class Widget(QtWidgets.QWidget):
    def __init__(self, *args, **kwargs):
        QtWidgets.QWidget.__init__(self, *args, **kwargs)
        lay = QtWidgets.QVBoxLayout(self)
        button = QtWidgets.QPushButton("Select color")
        button.clicked.connect(self.on_clicked)
        self.label = QtWidgets.QLabel()
        self.label.setAutoFillBackground(True)
        self.label.setFixedSize(100, 100)

        lay.addWidget(button)
        lay.addWidget(self.label)

    def on_clicked(self):
        color = QtWidgets.QColorDialog.getColor()
        if color.isValid():
            palette = self.label.palette()
            palette.setColor(QtGui.QPalette.Background, color)
            self.label.setPalette(palette)

if __name__ == '__main__':
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

或者使用 Qt 样式表:

from PySide2 import QtWidgets, QtGui, QtCore

class Widget(QtWidgets.QWidget):
    def __init__(self, *args, **kwargs):
        QtWidgets.QWidget.__init__(self, *args, **kwargs)
        lay = QtWidgets.QVBoxLayout(self)
        button = QtWidgets.QPushButton("Select color")
        button.clicked.connect(self.on_clicked)
        self.label = QtWidgets.QLabel()
        self.label.setFixedSize(100, 100)

        lay.addWidget(button)
        lay.addWidget(self.label)

    def on_clicked(self):
        color = QtWidgets.QColorDialog.getColor()
        if color.isValid():
            self.label.setStyleSheet("background-color: {}".format(color.name()))

if __name__ == '__main__':
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())
于 2018-02-28T18:34:10.127 回答