【问题标题】:Hide PyQt app from taskbar从任务栏中隐藏 PyQt 应用程序
【发布时间】:2010-10-28 16:24:13
【问题描述】:

我是 PyQt 的初学者。我试图创建一个简单的应用程序来尝试工具包的许多功能。我的问题是,如何从任务栏中隐藏应用程序图标? 我不希望用户能够看到任务栏中的图标并使用此图标将其最小化。我可以使用任何窗口标志来实现这一点吗?

【问题讨论】:

  • PyQt4 Minimize to Tray的可能重复
  • @katrielalex:我认为他指的是任务栏图标而不是托盘图标。
  • @PulpFiction:是的;您“最小化到托盘”的方式是隐藏任务栏图标并制作托盘图标。
  • @katrielalex 是的,我的意思是隐藏任务栏图标,而应用程序仍未最小化。

标签: python widget pyqt4


【解决方案1】:

这应该可以解决问题:

myApp.setWindowFlags(QtCore.Qt.Tool)

【讨论】:

    【解决方案2】:

    改编自this thread

    import sys
    from PyQt4.QtGui import *
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
    
        widget = QWidget()
    
        mainWindow = QMainWindow(widget)
        mainWindow.show()
    
        sys.exit(app.exec_())
    

    【讨论】:

      【解决方案3】:

      这让我疯了好几天。完整的应用代码在下面实现。

      密钥位:

      • 覆盖 closeEvent(),使其能够执行任一隐藏窗口 或真正的退出
      • 为用户创建一些工具来选择隐藏或 退出行为
      • 实例化时不显示()主窗口,只执行 exec_()应用程序
      import sys
      from PyQt4.QtGui import QAction, QApplication, QFrame, QIcon, \
          QMainWindow, QMenu, QSystemTrayIcon
      from PyQt4.QtCore import SIGNAL
      
      class MyApp(QMainWindow):
          def __init__(self, parent, title):
              super(QMainWindow, self).__init__(parent)
              self.exitOnClose = False
              exit = QAction(QIcon(), "Exit", self)
              self.connect(exit, SIGNAL("triggered()"), self.exitEvent)
              self.trayIcon = QSystemTrayIcon(QIcon(), self)
              menu = QMenu(self)
              menu.addAction(exit)
              self.trayIcon.setContextMenu(menu)
              self.connect(self.trayIcon, \
                  SIGNAL("activated(QSystemTrayIcon::ActivationReason)"), \
                  self.trayIconActivated)
              self.trayIcon.show()
              self.trayIcon.showMessage("MyApp is running!", "Click to open window\nRight click for menu" )
      
          def trayIconActivated(self, reason):
              if reason == QSystemTrayIcon.Context:
                  self.trayIcon.contextMenu().show()
              elif reason == QSystemTrayIcon.Trigger:
                  self.show()
                  self.raise_()
      
          def closeEvent(self, event):
              if self.exitOnClose:
                  self.trayIcon.hide()
                  del self.trayIcon
                  event.accept()
              else:
                  self.hide()
                  event.setAccepted(True)
                  event.ignore()
      
          def exitEvent(self):
              self.exitOnClose = True
              self.close()
      
      if __name__ == "__main__":
          app = QApplication(sys.argv)
          myapp = MyApp(None, "My System Tray App")
          app.exec_()
      

      【讨论】:

        【解决方案4】:

        我不建议尝试隐藏应用程序的任务栏,尤其是在应用程序可见的情况下。如果您只是想防止从任务栏最小化,那么您可以通过使用以下窗口标志创建顶级小部件来实现这一点:

        QWidget *mainWindow = new QWidget(0, Qt::CustomizeWindowHint 
            | Qt::WindowTitleHint | Qt::WindowSystemMenuHint 
            | Qt::WindowCloseButtonHint | Qt::WindowMaximizeButtonHint);
        

        如果您不想要最大化标志,您也可以将其排除在列表之外。

        Qt 可以使用的各种窗口标志记录在here (Qt::WindowFlags)

        【讨论】:

          【解决方案5】:

          如果您在 Ubuntu with Unity 上并希望在左侧的启动器中隐藏应用程序的图标,您可能需要Qt.SplashScreen。这对我有用,但我不记得我是否还需要Qt.Tool,这在 Windows 上就足够了。例如,对于 SplashScreen 尝试,您可能必须重新实现调整大小功能,因为它会禁用 QStatusBar(具有 SizeGrip)的此功能。

          Here 是一个尝试窗口标志的小例子。

          【讨论】:

            【解决方案6】:

            像这样初始化你的主窗口self.setWindowFlags(Qt.ToolTip)

            【讨论】:

              猜你喜欢
              • 2012-01-04
              • 1970-01-01
              • 1970-01-01
              • 2011-08-31
              • 2011-10-01
              • 1970-01-01
              • 2013-10-02
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多