我是PyQt的初学者。我试图创建一个简单的应用程序来尝试一些工具包的许多功能。我的问题是,如何从任务栏隐藏应用程序图标? 我不希望用户能够在任务栏中看到图标并使用此图标将其最小化。是否有任何窗口标志可用于实现此目的?
答案 0 :(得分:7)
这应该可以解决问题:
myApp.setWindowFlags(QtCore.Qt.Tool)
答案 1 :(得分:1)
这让我疯了好几天。完整的应用程序代码在下面实现。
关键位:
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)