从任务栏隐藏PyQt应用程序

时间:2010-10-28 16:24:14

标签: python widget pyqt4

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

6 个答案:

答案 0 :(得分:7)

这应该可以解决问题:

myApp.setWindowFlags(QtCore.Qt.Tool)

答案 1 :(得分:1)

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

关键位:

  • 覆盖closeEvent(),使其能够执行任何隐藏窗口 或者是真正的退出
  • 创建一些工具供用户选择隐藏或 退出行为
  • 在实例化时不显示()主窗口,只是exec_()App
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_()

答案 2 :(得分:0)

我不建议尝试隐藏应用程序的任务栏,特别是如果应用程序可见。如果您只是试图阻止从任务栏中进行最小化,那么您可以通过使用以下窗口标志创建顶级窗口小部件来实现此目的:

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

如果您不想要最大化标记,您也可以将其保留在列表之外。

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

改编自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_())

答案 5 :(得分:0)

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