【问题标题】:QLabel inside QMenuQMenu 中的 QLabel
【发布时间】:2014-06-03 09:16:12
【问题描述】:

我正在尝试将QLabel 添加到QMenu,因为我需要使用自动换行的文本。但它只是在菜单中添加了一个空行。

#!/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()

我做错了什么?

【问题讨论】:

  • 以上代码适用于 Windows 8.0、Python 2.7.3 - 32 位、PyQt v4.10.1、Qt v4.8.4。您在 Linux 中使用的窗口管理器可能存在某种问题?
  • 也许 Qt 不支持在 Unity 的图标上下文菜单中嵌入小部件,或者根本不可能。
  • 你们都完全正确。它不适用于 Unity,但适用于 Kubuntu 和 Xubuntu。如果这是错误或“功能”,我将进一步调查。我会接受这个作为答案。
  • 如果有任何证明链接,这将是一个答案。我试图找到指标 API 以了解是否可以将任意小部件放入其中,但没有发现任何有用的东西。
  • 我在 Lubuntu / LXDE 上遇到了同样的问题,很遗憾这还没有解决

标签: python qt pyqt pyqt4


【解决方案1】:

实例化QWidgetAction时传递QMenu对象

action = QWidgetAction(contextMenu)

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

【讨论】:

  • 这对 Unity 没有帮助。其他 DE 可以使用 QMenuQApplication
猜你喜欢
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多