You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySide6开发时钟程序:右键菜单修改字体颜色失效求助

PySide6时钟程序字体颜色修改功能修复

你的代码存在以下几个关键问题,导致changeFontColor函数无法正常工作:

问题1:信号连接方式错误

self.actionB1.triggered.connect(self.changeFontColor('black')) 这种写法会直接执行changeFontColor('black'),而不是把它作为回调函数绑定到信号上。正确的做法是用lambda表达式传递参数。

问题2:修改颜色后未更新UI

changeFontColor函数只修改了self.font_color变量,但没有同步更新标签的样式表,所以界面不会有变化。需要在函数里重新设置label的styleSheet。

问题3:菜单动作未添加到子菜单

你创建了fontColorMenu子菜单,但没有将actionB1、actionB2、actionB3添加到这个子菜单中,右键菜单里根本看不到这些颜色选项。

问题4:未定义font变量

self.label.setFont(font)中的font变量没有初始化,运行时会抛出NameError,需要先创建QFont对象。

问题5:标签未添加布局且无初始文本

原代码里的QLabel既没有设置初始文本,也没添加到窗口布局中,导致标签不会显示在界面上。


修正后的完整代码

import sys
from PySide6.QtWidgets import QWidget, QMenu, QAction, QLabel, QApplication, QVBoxLayout
from PySide6.QtCore import Qt
from PySide6.QtGui import QFont

class Clock(QWidget):
    def __init__(self, parent=None) -> None:
        super().__init__(parent)

        self.left = 1100
        self.top = 800
        self.width = 320
        self.height = 60

        # Menu
        self.setContextMenuPolicy(Qt.CustomContextMenu)
        self.customContextMenuRequested.connect(self.mouseRightMenu)

        # Font
        self.font_color = 'blue'
        self.font = QFont("Arial", 24)  # 初始化字体

        # UI
        self.initUI()

    def changeFontColor(self, fcolor) -> None:
        self.font_color = fcolor
        # 更新标签样式表,刷新界面
        self.label.setStyleSheet(f'color:{self.font_color};')

    def mouseRightMenu(self, pos) -> None:
        self.menu = QMenu(self)

        # font color子菜单
        fontColorMenu = self.menu.addMenu('font color')
        # 创建颜色动作
        actionBlack = QAction('black', self)
        actionRed = QAction('red', self)
        actionYellow = QAction('yellow', self)
        # 绑定带参数的回调
        actionBlack.triggered.connect(lambda: self.changeFontColor('black'))
        actionRed.triggered.connect(lambda: self.changeFontColor('red'))
        actionYellow.triggered.connect(lambda: self.changeFontColor('yellow'))
        # 将动作添加到子菜单
        fontColorMenu.addAction(actionBlack)
        fontColorMenu.addAction(actionRed)
        fontColorMenu.addAction(actionYellow)
        # 在鼠标位置显示菜单
        self.menu.exec(self.mapToGlobal(pos))

    def initUI(self) -> None:
        # 设置窗口尺寸位置
        self.setGeometry(self.left, self.top, self.width, self.height)

        # 创建标签并设置属性
        self.label = QLabel("00:00:00")  # 添加初始文本
        self.label.setAlignment(Qt.AlignCenter)
        self.label.setFont(self.font)
        self.label.setStyleSheet(f'color:{self.font_color};')
        
        # 添加布局,让标签显示在窗口中
        layout = QVBoxLayout()
        layout.addWidget(self.label)
        self.setLayout(layout)

if __name__ == '__main__':
    App = QApplication(sys.argv)
    clock = Clock()
    clock.show()
    sys.exit(App.exec())

内容的提问来源于stack exchange,提问作者ivaquero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:11:12