PyQt5 QColorDialog – 设置背景色

  • Post category:Python

PyQt5 QColorDialog是一个用于管理颜色的对话框,可以在图形用户界面(GUI)中显示对话框以允许用户更改颜色。下面是PyQt5 QColorDialog设置背景色的完整使用攻略。

导入模块

from PyQt5.QtWidgets import QAction, QColorDialog, QMenu, QMainWindow, QApplication
from PyQt5.QtGui import QPainter, QColor
from PyQt5.QtCore import Qt
import sys

定义主窗口

在主窗口中,我们可以添加菜单栏和工具栏,并将菜单和工具栏与QColorDialog相链接。在这里,我们增加一个 Action,“Set Color”,用于打开 QColorDialog。

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 设置主窗口标题
        self.setWindowTitle("PyQt5 QColorDialog 示例")

        # 创建“文件“菜单的 Action
        file_action = QAction("Exit", self)
        file_action.setShortcut("Ctrl+Q")
        file_action.setStatusTip("退出应用程序")
        file_action.triggered.connect(self.close)

        # 创建“工具栏”中的 Action
        set_color_action = QAction("Set Color", self)
        set_color_action.triggered.connect(self.set_color)

        # 将 Action 添加到菜单
        file_menu = self.menuBar().addMenu("文件")
        file_menu.addAction(file_action)

        # 将 Action 添加到工具栏
        tool_bar = self.addToolBar("工具栏")
        tool_bar.addAction(set_color_action)

    def set_color(self):
        color = QColorDialog.getColor()
        if color.isValid():
            self.setStyleSheet("background-color: " + color.name())

set_color函数中,我们使用QColorDialog.getColor()方法弹出QColorDialog对话框。该对话框会返回用户选择的颜色。我们用isValid()方法来确定是否选择了有效的颜色,然后将该颜色设置为主窗口的背景色。

完整代码示例

from PyQt5.QtWidgets import QAction, QColorDialog, QMenu, QMainWindow, QApplication
from PyQt5.QtGui import QPainter, QColor
from PyQt5.QtCore import Qt
import sys

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 设置主窗口标题
        self.setWindowTitle("PyQt5 QColorDialog 示例")

        # 创建“文件“菜单的 Action
        file_action = QAction("Exit", self)
        file_action.setShortcut("Ctrl+Q")
        file_action.setStatusTip("退出应用程序")
        file_action.triggered.connect(self.close)

        # 创建“工具栏”中的 Action
        set_color_action = QAction("Set Color", self)
        set_color_action.triggered.connect(self.set_color)

        # 将 Action 添加到菜单
        file_menu = self.menuBar().addMenu("文件")
        file_menu.addAction(file_action)

        # 将 Action 添加到工具栏
        tool_bar = self.addToolBar("工具栏")
        tool_bar.addAction(set_color_action)

    def set_color(self):
        color = QColorDialog.getColor()
        if color.isValid():
            self.setStyleSheet("background-color: " + color.name())


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

示例1

在这个示例中,我们要设计一个简单的疯狂老师程序,当点击工具栏的“Set Color”按钮时,弹出QColorDialog对话框,让用户选择背景颜色,然后将颜色设置为窗口的背景。

from PyQt5.QtWidgets import QAction, QColorDialog, QMenu, QMainWindow, QApplication
from PyQt5.QtGui import QPainter, QColor, QBrush
from PyQt5.QtCore import Qt
import sys

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 设置主窗口标题
        self.setWindowTitle("疯狂老师")

        # 创建“文件“菜单的 Action
        file_action = QAction("Exit", self)
        file_action.setShortcut("Ctrl+Q")
        file_action.setStatusTip("退出应用程序")
        file_action.triggered.connect(self.close)

        # 创建“工具栏”中的 Action
        set_color_action = QAction("Set Color", self)
        set_color_action.triggered.connect(self.set_color)

        # 将 Action 添加到菜单
        file_menu = self.menuBar().addMenu("文件")
        file_menu.addAction(file_action)

        # 将 Action 添加到工具栏
        tool_bar = self.addToolBar("工具栏")
        tool_bar.addAction(set_color_action)

    def set_color(self):
        color = QColorDialog.getColor()
        if color.isValid():
            self.setStyleSheet("background-color: " + color.name())

    def paintEvent(self, event):
        painter = QPainter(self)
        brush = QBrush(Qt.red)
        painter.setBrush(brush)
        painter.drawRect(100, 100, 200, 200)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

示例2

在这个示例中,我们要设计一个简单的颜色选择器程序,当用户单击“颜色选择器”按钮时,打开QColorDialog对话框,然后将选择的颜色绘制在一个方块中。

from PyQt5.QtWidgets import QAction, QColorDialog, QMenu, QMainWindow, QApplication
from PyQt5.QtGui import QPainter, QColor, QBrush
from PyQt5.QtCore import Qt
import sys

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 设置主窗口标题
        self.setWindowTitle("颜色选择器")

        # 创建“文件“菜单的 Action
        file_action = QAction("Exit", self)
        file_action.setShortcut("Ctrl+Q")
        file_action.setStatusTip("退出应用程序")
        file_action.triggered.connect(self.close)

        # 创建“工具栏”中的 Action
        set_color_action = QAction("颜色选择器", self)
        set_color_action.triggered.connect(self.set_color)

        # 将 Action 添加到菜单
        file_menu = self.menuBar().addMenu("文件")
        file_menu.addAction(file_action)

        # 将 Action 添加到工具栏
        tool_bar = self.addToolBar("工具栏")
        tool_bar.addAction(set_color_action)

        # 初始化颜色
        self.color = Qt.white

    def set_color(self):
        color = QColorDialog.getColor()
        if color.isValid():
            self.color = color
        self.update()

    def paintEvent(self, event):
        painter = QPainter(self)
        brush = QBrush(self.color)
        painter.setBrush(brush)
        painter.drawRect(100, 100, 50, 50)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

这两个示例中都使用了QPainter类,在窗口的paintEvent()事件中绘制一个矩形或正方形,并将填充颜色设置为用户选择的颜色,以完成演示。