QMenu中包含QLabel

3

我想在QMenu中添加一个QLabel,因为需要有自动换行的文本。但是它却在菜单中添加了一个空行。

#!/usr/bin/env python3

import os
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class My(object):
    def __init__(self):
        self.qapp = QApplication(sys.argv)
        self.status_icon = QSystemTrayIcon(QIcon.fromTheme('edit-delete'))
        contextMenu = QMenu()

        label = QLabel('foobar')
        action = QWidgetAction(self.qapp)
        action.setDefaultWidget(label)
        contextMenu.addAction(action)

        self.status_icon.setContextMenu(contextMenu)

    def run(self):
        self.status_icon.show()
        self.qapp.exec_()

if __name__ == '__main__':
    My().run()

系统托盘图标

我做错了什么?


1
上面的代码在我的Windows 8.0,Python 2.7.3 - 32位,PyQt v4.10.1,Qt v4.8.4上运行正常。可能是你在Linux上使用的窗口管理器出了一些问题? - three_pineapples
1
也许Qt不支持在Unity的图标上下文菜单中嵌入小部件,或者根本不可能实现。 - Pavel Strakhov
你们两个都是对的。它不能在Unity上工作,但可以在Kubuntu和Xubuntu上工作。我会进一步调查这是否是一个错误或“特性”。我会接受这个答案。 - Germar
如果有任何证明链接,那就是一个答案。我尝试查找指标API以找出是否可以将任意小部件放在其中,但没有找到任何有用的东西。 - Pavel Strakhov
我在Lubuntu / LXDE上也遇到了同样的问题,很遗憾看到这个问题仍未解决。 - sunyata
1个回答

0
在实例化QWidgetAction时,传递QMenu对象。
action = QWidgetAction(contextMenu)

你的代码在我的信号/槽设置中运行良好。


这对Unity没有帮助。其他DE使用QMenuQApplication都没问题。 - Germar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接