从任务栏隐藏PyQt应用程序
我刚开始学习PyQt,想做一个简单的应用程序来试试这个工具包的各种功能。我的问题是,怎么才能把应用程序的图标从任务栏上隐藏起来?我不想让用户在任务栏上看到这个图标,也不想让他们通过这个图标来最小化应用。有没有什么窗口标志可以用来实现这个呢?
7 个回答
2
这让我困扰了好几天。下面是实现这个功能的完整应用代码。
关键点:
- 重写 closeEvent() 方法,让它可以选择是只隐藏窗口还是完全退出应用
- 提供一个选项,让用户可以选择是隐藏窗口还是退出应用
- 在创建应用时,不要直接显示主窗口,而是直接执行应用
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_()
14
这样做就可以了:
myApp.setWindowFlags(QtCore.Qt.Tool)
1
改编自 这个讨论帖:
import sys
from PyQt4.QtGui import *
if __name__ == '__main__':
app = QApplication(sys.argv)
widget = QWidget()
mainWindow = QMainWindow(widget)
mainWindow.show()
sys.exit(app.exec_())