我正在编写一个PyQt系统脚本脚本。它只是一个系统服务的开关。我正在通过此代码向QMenu添加QActions,我的目的是显示正在运行的服务绿色并停止服务红色:
....
for service, started in s.services.items():
action = self.menu.addAction(service)
if started: #It is my purpose, but obviously it doesn't work
action.setFontColor((0, 255, 0))
else:
action.setFontColor((255, 0, 0))
action.triggered.connect(functools.partial(self.service_clicked, service))
....
问题是,QAction没有setFontColor方法:)。它有一个setFont方法,但我在QFont文档中看不到颜色相关的方法。它不支持富文本格式化。
我找到了一个可能的解决方案here,但对于这个简单的操作似乎有很多工作。
有人能建议我更简单吗?
答案 0 :(得分:1)
我能看到的唯一更简单的方法是使QAction
可检查(并定义“服务处于活动状态”应该检查项目),然后使用Qt样式表来获得所需的效果
样式菜单项的示例可在此处找到:Qt Style Sheets - Customizing QMenu
答案 1 :(得分:1)
不完全符合您的要求,但您可以将与QAction相关联的图标更改为一个红色或绿色的点非常简单:所以菜单文本不会改变颜色,但点会改变。
....
for service, started in s.services.items():
action = self.menu.addAction(service)
if started: #It is my purpose, but obviously it doesn't work
action.setIcon(QIcon(":/greendot.png"))
else:
action.setIcon(QIcon(":/reddot.png"))
action.triggered.connect(functools.partial(self.service_clicked, service))
....