簡體   English   中英

從任務欄中隱藏 PyQt 應用程序

[英]Hide PyQt app from taskbar

我是 PyQt 的初學者。 我試圖創建一個簡單的應用程序來嘗試工具包的許多功能。 我的問題是,如何從任務欄中隱藏應用程序圖標? 我不希望用戶能夠看到任務欄中的圖標並使用此圖標將其最小化。 是否有任何窗口標志可用於實現此目的?

這應該可以解決問題:

myApp.setWindowFlags(QtCore.Qt.Tool)

這讓我瘋狂了好幾天。 完整的應用程序代碼在下面實現。

關鍵位:

  • 覆蓋 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_()

改編自此線程

import sys
from PyQt4.QtGui import *

if __name__ == '__main__':
    app = QApplication(sys.argv)

    widget = QWidget()

    mainWindow = QMainWindow(widget)
    mainWindow.show()

    sys.exit(app.exec_())

如果你在使用 Unity 的 Ubuntu並且想要從左側的啟動器中隱藏應用程序的圖標,你可能需要Qt.SplashScreen 這對我Qt.Tool ,但我不記得我是否還需要Qt.Tool ,這在 Windows 上就足夠了。 對於 SplashScreen 嘗試,您可能必須重新實現調整大小功能,因為它禁用了 QStatusBar(具有 SizeGrip)的此功能。

是一個嘗試窗口標志的小例子。

我不建議嘗試隱藏應用程序的任務欄存在,尤其是在應用程序可見的情況下。 如果您只是想防止從任務欄最小化,那么您可以通過使用以下窗口標志創建頂級小部件來實現此目的:

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

如果您不想要最大化標志,您也可以將該標志排除在列表之外。

Qt 可以使用的各種窗口標志記錄在此處 (Qt::WindowFlags)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM