【问题标题】:QSytemTrayIcon does not show up in Ubuntu 12.04QSytemTrayIcon 未出现在 Ubuntu 12.04 中
【发布时间】:2013-03-10 02:14:47
【问题描述】:

我创建了一个使用 PyQt4 在后台运行的程序。系统托盘图标是在一个单独的线程中创建的,它允许我在创建并放置在托盘中之后与主程序进行交互。我以前在 Ubuntu 10.04 中从来没有遇到过这个问题。但是,我最近升级到了 Ubuntu 12.04,由于某种原因,甚至没有我想要的 QSystemTrayIcon 的踪迹。谁能告诉我这里到底发生了什么?我在 AskUbuntu 和 SO 上查找了有关我的问题的帖子,但似乎在数据库中找不到与我的问题匹配的任何内容。我只包含了我认为相关的部分代码,但如有必要会提供更多信息。

编辑:我已经在 Ubuntu 中修改了托盘面板白名单,并将其设置为 ['all'],因此我能够确定这不是问题。

相关代码:

class notify(threading.Thread, QtGui.QSystemTrayIcon):
    def __init__(self, process, iconMain, iconNew, parent=None):
        threading.Thread.__init__(self)
        QtGui.QSystemTrayIcon.__init__(self, iconMain, parent)

        self.menu = QtGui.QMenu(parent)
        self.menuNew = QtGui.QMenu(parent)

        viewAdsAction = self.menu.addAction("View Ads")
        textModeAction = self.menu.addAction("Text-Mode")
        exitAction = self.menu.addAction("Exit")
        textModeActionNew = self.menuNew.addAction("PC-Mode")
        exitActionNew = self.menuNew.addAction("Exit")

        self.iconMain = iconMain
        self.iconNew = iconNew
        self.setContextMenu(self.menu)
        self.process = process
        self.textMode = False  

在 main() 中执行:

def main():
    os.chdir(os.getenv("HOME") + "/.Phones")
    beginMain = mainProgram()
    beginMain.start()
    app = QtGui.QApplication(sys.argv)

    w = QtGui.QWidget()

    notifications = notify(beginMain, QtGui.QIcon("icon-58x58.xpm"), QtGui.QIcon("notify.xpm"), w)
    notifications.show()
    notifications.start()

    sys.exit(app.exec_())

【问题讨论】:

  • class notify(threading.Thread, QtGui.QSystemTrayIcon) 这在我看来很奇怪。你确定要继续这个 - 从两个完全不同的类继承?
  • @warwaruk,我试图运行一个通过无限循环进行检查的线程,并且还使用 QSystemTrayIcon 与该循环进行交互。它似乎工作正常......还没有问题。
  • 我认为这是有风险的,因为父类不是你实现的,它们非常复杂,你可能会有属性冲突,尤其是当你添加自己的时候。在某些时候,您可能会遇到难以追踪的问题。
  • 最好把这个问题作为一个单独的问题来问 - 看看其他人的想法。
  • 感谢您的cmets/建议warwaruk,我以后开发时会记住这一点。也许我以后会问这个问题。

标签: python qt pyqt4 ubuntu-12.04 system-tray


【解决方案1】:

我解决了我的问题,解决方案是垃圾。显然 Qt 和 Unity 无法适应某些分辨率,我运行的是 58x58 缩放图标。我将它缩小到 48x48,现在系统托盘图标可见,并且可以在我的程序中正常工作。

【讨论】:

    猜你喜欢
    • 2015-02-02
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    相关资源
    最近更新 更多