【pyqt5學習】——窗口最小化至托盤、取消任務欄圖標

目錄

1、最小化至托盤

1)重寫系統托盤類,設置托盤圖標等屬性

2)將具體的窗口放入托盤

2、取消任務欄界面圖標

3、問題匯總

1)退出后托盤圖標還是存在,沒有消失

2)最小化后左下角會出現?窗口

3)創建快捷方式后運行軟件無圖標


1、最小化至托盤

pyqt5 窗口最小化到windows托盤_Marvin_Xavier的博客-CSDN博客_pyqt5 最小化到托盤pyqt5創建的程序一般是默認可以最小化到任務欄的,這也是一般程序都會有的功能。平時我們使用的有些程序也會最小化到任務欄旁邊的托盤上,就是在時間日期旁邊的小圖標,這個需要額外在pyqt5中寫點代碼設置下了。首先我們創建一個demo程序,這個程序就是創建一個窗口,窗口中有一個按鈕和textBrowser,按下按鈕后可以在textBrowser中寫一個helloworld如果不知道在vscode下如何開發puqt5,可以參看下這個https://blog.csdn.net/marwenx/arthttps://blog.csdn.net/marwenx/article/details/107200049

1)重寫系統托盤類,設置托盤圖標等屬性

具有以下功能:

鼠標右鍵點擊托盤圖標,會有三個功能的菜單欄(啟動、顯示通知、退出)

from PyQt5 import QtWidgets,QtCore,QtGui
import ospath = os.path.abspath(__file__)
filePath = os.path.dirname(path)class TrayIcon(QtWidgets.QSystemTrayIcon):def __init__(self, MainWindow, parent=None):super(TrayIcon, self).__init__(parent)self.ui = MainWindowself.createMenu()def createMenu(self):self.menu = QtWidgets.QMenu()self.showAction1 = QtWidgets.QAction("啟動", self, triggered=self.show_window)self.showAction2 = QtWidgets.QAction("顯示通知", self, triggered=self.showMsg)self.quitAction = QtWidgets.QAction("退出", self, triggered=self.quit)self.menu.addAction(self.showAction1)self.menu.addAction(self.showAction2)self.menu.addAction(self.quitAction)self.setContextMenu(self.menu)# 設置圖標self.setIcon(QtGui.QIcon(filePath+"/resources/icon.jpg"))self.icon = self.MessageIcon()# 把鼠標點擊圖標的信號和槽連接self.activated.connect(self.onIconClicked)def showMsg(self):self.showMessage("喝水提醒小工具", "點擊退出", self.icon)def show_window(self):# 若是最小化,則先正常顯示窗口,再變為活動窗口(暫時顯示在最前面)self.ui.showNormal()self.ui.activateWindow()def quit(self):QtWidgets.qApp.quit()# 鼠標點擊icon傳遞的信號會帶有一個整形的值,1是表示單擊右鍵,2是雙擊,3是單擊左鍵,4是用鼠標中鍵點擊def onIconClicked(self, reason):if reason == 2 or reason == 3:self.showMessage("喝水提醒小工具", "點擊退出", self.icon)if self.ui.isMinimized() or not self.ui.isVisible():# 若是最小化,則先正常顯示窗口,再變為活動窗口(暫時顯示在最前面)self.ui.showNormal()self.ui.activateWindow()self.ui.setWindowFlags(QtCore.Qt.Window)self.ui.show()else:# 若不是最小化,則最小化self.ui.showMinimized()self.ui.setWindowFlags(QtCore.Qt.SplashScreen)self.ui.show()

2)將具體的窗口放入托盤

? ?tray = TrayIcon(main_)
? ?tray.show()

完整代碼?

from main import Ui_MainWindow as Main_Ui # 導入利用Qt設計的界面代碼
from Tray import TrayIconfrom PyQt5.QtWidgets import QMessageBox,QMainWindow,QApplication
from PyQt5 import QtCore
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlotimport sys,psutil,os,datetime,pyttsx3,timepath = os.path.abspath(__file__)
filePath = os.path.dirname(path)# 邏輯代碼
class main_logic(QMainWindow,Main_Ui):def __init__(self):super(main_logic, self).__init__()self.setupUi(self)if __name__ == '__main__':app = QApplication(sys.argv)main_ = main_logic()main_.showMinimized()tray = TrayIcon(main_)tray.show()sys.exit(app.exec_())

2、取消任務欄界面圖標

最小化的時候如果只是按照上面進行的話,最小化到托盤后,任務欄也會有圖標,這時候通過設置窗口屬性可以取消任務欄圖標

不足是會導致最小化等按鈕沒有,需要通過自定義按鈕或者動作(action)來實現這些功能

?這里我是通過工具欄和action重寫了最小化關閉按鈕

pyqt5 隱藏任務欄圖標_Marvin_Xavier的博客-CSDN博客_pyqt隱藏任務欄pyqt5中隱藏任務欄圖標很簡單,只需要一行代碼即可。MainWindow.setWindowFlags(QtCore.Qt.SplashScreen | QtCore.Qt.FramelessWindowHint)首先還是先了解下pyqt的窗口風格的設置setWindowFlags(Qt.WindowFlags)函數,Qt.WindowFlags類如下:1.窗口類型QtCore.Qt.Widget#插件默認窗口,有最小化、最大化、關閉按鈕QtCore.Qt.Window#https://blog.csdn.net/marwenx/article/details/107226153

MainWindow.setWindowFlags(QtCore.Qt.SplashScreen | QtCore.Qt.FramelessWindowHint)
setWindowFlags(Qt.WindowFlags)函數,Qt.WindowFlags類如下:1.窗口類型QtCore.Qt.Widget
#插件默認窗口,有最小化、最大化、關閉按鈕QtCore.Qt.Window
#普通窗口,有最小化、最大化、關閉按鈕QtCore.Qt.Dialog
#對話框窗口,有問號和關閉按鈕QtCore.Qt.Popup
#彈出窗口,窗口無邊框化QtCore.Qt.ToolTip
#提示窗口,窗口無邊框化,無任務欄窗口QtCore.Qt.SplashScreen
#飛濺屏幕,窗口無邊框化,無任務欄窗口QtCore.Qt.SubWindow
#子窗口,窗口無按鈕但有標題欄2.使用自定義外觀的頂層窗口標志QtCore.Qt.MSWindowsFixedSizeDialogHint
#窗口無法調整大小QtCore.Qt.FramelessWindowHint
#窗口無邊框化QtCore.Qt.CustomizeWindowHint
#有邊框但無標題欄和按鈕,不能移動和拖動QtCore.Qt.WindowTitleHint
#添加標題欄和一個關閉按鈕QtCore.Qt.WindowSystemMenuHint
#添加系統目錄和一個關閉按鈕QtCore.Qt.WindowMaximizeButtonHint
#激活最大化和關閉按鈕,禁止最小化按鈕QtCore.Qt.WindowMinimizeButtonHint
#激活最小化和關閉按鈕,禁止最大化按鈕QtCore.Qt.WindowMinMaxButtonsHint
#激活最小化、最大化和關閉按鈕,
#相當于QtCore.Qt.WindowMaximizeButtonHint|QtCore.Qt.WindowMinimizeButtonHintQtCore.Qt.WindowCloseButtonHint
#添加一個關閉按鈕QtCore.Qt.WindowContextHelpButtonHint
#添加問號和關閉按鈕,像對話框一樣QtCore.Qt.WindowStaysOnTopHint
#窗口始終處于頂層位置QtCore.Qt.WindowStaysOnBottomHint
#窗口始終處于底層位置

?

3、問題匯總

pyqt5 關閉程序顯示提示信息+最小化程序到托盤+隱藏任務欄圖標_Marvin_Xavier的博客-CSDN博客_pyqt5 最小化到托盤這個程序主要完成幾個目的:1. 主窗口控件最小化等操作后正常可用(點擊按鈕會在textBrowser中加入一行hello world);2. 點擊右上角x鍵可以顯示提示信息且按鈕功能正常(退出程序或者最小化到托盤);3. 最小化到托盤后實現兩個功能(左鍵單擊顯示或隱藏主界面,右鍵顯示顯示選線可以關閉或者顯示主界面,);1. 首先用designer新建了一個demo,這個demo上只有兩個控件,一個是textBrowser,一個是pushButton,直接從designer側邊拖.https://blog.csdn.net/marwenx/article/details/107226987

1)退出后托盤圖標還是存在,沒有消失

加上一句,在退出前,先將托盤圖標設置為不可見

# 函數功能:退出程序def quit(self):self.setVisible(False)  # 托盤圖標會自動消失QtWidgets.qApp.quit()

2)最小化后左下角會出現?窗口

def onIconClicked(self, reason):if reason == 2 or reason == 3:# self.showMessage("Message", "skr at here", self.icon)if self.ui.isMinimized() or not self.ui.isVisible():#若是最小化,則先正常顯示窗口,再變為活動窗口(暫時顯示在最前面)self.ui.showNormal()self.ui.activateWindow()self.ui.setWindowFlags(QtCore.Qt.Window)self.ui.show()else:#若不是最小化,則最小化self.ui.showMinimized()self.ui.setWindowFlags(QtCore.Qt.SplashScreen)self.ui.show()# self.ui.show()

?修改為:

def onIconClicked(self, reason):if reason == 2 or reason == 3:# self.showMessage("Message", "skr at here", self.icon)if self.ui.isMinimized() or not self.ui.isVisible():#若是最小化,則先正常顯示窗口,再變為活動窗口(暫時顯示在最前面)self.ui.showNormal()self.ui.activateWindow()self.ui.setWindowFlags(QtCore.Qt.Window)self.ui.show()else:self.ui.close()

通過托盤圖標雙擊啟動后再點擊關閉后左下角就消失了?

3)創建快捷方式后運行軟件無圖標

有時候圖標我們用的是相對路徑,在創建快捷方式的時候會出錯,我們利用絕對路徑

path = os.path.abspath(__file__)
filePath = os.path.dirname(path)
self.setIcon(QtGui.QIcon(filePath+"/resources/icon.jpg"))

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255435.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255435.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255435.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

標準庫類型String,Vector

string對象中每個字符的處理&#xff1a; 要用到 for(聲明:表達式) 語句 比如簡單的打印string str中每一個字符 --- string str("hello world!!!"); for(auto c: str)cout<<c<<endl; (ps:這里auto 的意思是讓編譯器自己來決定c變量的類型) --- 再舉一…

React 是怎樣煉成的

本文主要講述 React 的誕生過程和優化思路。 內容整理自 2014 年的 OSCON - React Architecture by vjeux&#xff0c;雖然從今天&#xff08;2018&#xff09;來看可能會有點歷史感&#xff0c;但仍然值得學習了解。以史為鑒&#xff0c;從中也可以管窺 Facebook 優秀的工程管…

HOJ 1640 Mobile Phone

題意&#xff1a;有一個n*n的矩陣&#xff0c;op1時&#xff0c;在(x,y)增加值z&#xff0c;op2時&#xff0c;求以(x1,y1)和(x2,y2)構成的矩陣的和。 思路&#xff1a;二維線段樹。 代碼&#xff1a; 1 #include<stdio.h>2 #include<string.h>3 const int N1111;4…

vxWorks多任務編程初探-上

進程&#xff08;Process&#xff09;是具有一定獨立功能的程序關于某個數據集合上的一次運行活動&#xff0c;是系統進行資源分配和調度的一個獨立單位。程序只是一組指令的有序集合&#xff0c;它本身沒有任何運行的含義&#xff0c;只是一個靜態實體。而進程則不同&#xff…

【pyqt5學習】——重寫窗口右上角關閉事件closeEvent()

目錄 1、法一&#xff1a;設置中文按鈕 2、法二&#xff1a;不設置中文按鈕 pyqt5 關閉按鈕顯示提示信息_Marvin_Xavier的博客-CSDN博客_pyqt 關閉按鈕https://blog.csdn.net/marwenx/article/details/107226531 1、法一&#xff1a;設置中文按鈕 def closeEvent(self, even…

感動要哭 擼了一個半小時的重載預算符高精

擼了一個半小時代碼&#xff0c;沒玩守望&#xff08;垃圾游戲毀我青春五個金牌都帶不起隊友&#xff09;最后編譯出312個錯誤。嚇我&#xff0c;然而改了幾個地方就直接過了直接過了直接過了&#xff0c;目前還是不明白ostream&#xff0c;istream的用處&#xff0c;上網才搞定…

LVDS DP等顯示器接口簡介

LVDS 產品傳輸速率從幾百Mbps到2Gbps。它是電流驅動的&#xff0c;他通過在接收端放置一個負載而得到的電壓&#xff0c;當電流正向流動&#xff0c;接收端輸出為1&#xff0c;反之為0&#xff0c;它的擺幅250mV-450mV. lvds 即低壓差分信號傳輸&#xff0c;是一種滿足高性能傳…

http協議相關內容

二、HTTP協議1、協議&#xff1a;共同遵守的規則。2、網絡協議有&#xff1a;TCP&#xff08;有三次握手機制&#xff09;/IP&#xff1a;傳輸控制協議/地址協議&#xff0c;SMTP&#xff1a;簡單郵件傳輸協議&#xff0c;FTP&#xff1a;文件傳輸協議&#xff0c;http&#xf…

使用XmlTextReader 讀取XML

XmlTextReader 限于只向前的讀取 XmlTextReader 的技術類似于讀取其他任何文件 首先打開文件&#xff0c;然后從文件中讀取信息,最后關閉文件. 每次從文件中讀取信息時&#xff0c;他在文件中的位置都會前移.到達文件結尾的時候就什么都不讀了。 1 創建XmlTextReader對象 …

C#中ComboBox動態綁定賦值

http://www.crifan.com/csharp_combobox_data_dynamic_binding/ C#中&#xff0c;已有一個List&#xff0c;想要動態的&#xff0c;綁定到ComboBox中。 【解決過程】 1.參考&#xff1a; c# winform comboBox動態綁定數據 去試試代碼&#xff1a; cmbSubCategory.DataSource g…

【pyqt5學習】——日歷控件calendarWidget設置單元格格式(前景、背景)、日歷控件屬性編輯

目錄 0、導入庫 1、返回日歷選中的日期 2、更改日歷控件周幾&#xff08;比如一個月屬于周一的日期&#xff09;的所有格子屬性 3、更改日歷控件單個格子&#xff08;指定日期&#xff09;屬性 4、日歷格子屬性 5、信號——clicked() 6、成果展示 0、導入庫 from PyQt5.Q…

linux內核數據結構之鏈表

1、前言 最近寫代碼需用到鏈表結構&#xff0c;正好公共庫有關于鏈表的。第一眼看時&#xff0c;覺得有點新鮮&#xff0c;和我之前見到的鏈表結構不一樣&#xff0c;只有前驅和后繼指針&#xff0c;而沒有數據域。后來看代碼注釋發現該代碼來自linux內核&#xff0c;在linux源…

為什么使用 XML

為什么使用 XML&#xff1f; Web 使我們能夠與任何地方的任何人通訊。廣泛接受的標準&#xff08;這對完全使用 Web 的潛力是至關重要的&#xff09;允許 Web 在多種交互操作的技術層上通訊。一個重要層是可視化顯示和用戶界面&#xff0c;例如 HTML、GIF 和 JScript(TM) 之類的…

bzoj1084: [SCOI2005]最大子矩陣

dp。轉移方程在代碼里。。轉載于:https://www.cnblogs.com/invoid/p/5451202.html

ci事務

參考鏈接:http://www.tuicool.com/articles/jqeuU3轉載于:https://www.cnblogs.com/norm/p/6382396.html

【bug修復】you must feed a value for placeholder tensor ‘Placeholder‘ with dtype float解決方案

最近碰到了這個you must feed a value for placeholder tensor Placeholder with dtype float and shape的問題&#xff0c;字面意思很好理解&#xff0c;就是沒有給Placeholder賦值&#xff0c;可是我明明賦值了&#xff0c;百度了許多&#xff0c;也都是讓我檢查是否賦值以及…

動態代理3之代理工廠實現

動態代理的深化&#xff1a;承接動態代理2( 對 上級實例進行 深化)&#xff0c;也就是 spring 的前身 &#xff08;必須掌握&#xff09;實例&#xff1a; 文件說明&#xff1a;1.有一個Waiter接口&#xff0c;該接口有一個 server() 、ShouQian()方法 2.有一個 Waiter接口的實…

一個簡單的XML文檔例子

一個簡單的XML文檔例子: <?xml version"1.0"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Dont forget me this weekend!</body> </note> 文檔的第一…

python set

python的set和其他語言類似, 是一個無序不重復元素集, 基本功能包括關系測試和消除重復元素. 集合對象還支持union(聯合), intersection(交), difference(差)和sysmmetric difference(對稱差集)等數學運算. sets 支持 x in set, len(set),和 for x in set。作為一個無序的集…

【bug修復】解決ValueError: Tensor(“Variable:0“ dtype=float32_ref) must be from the same graph as Tensor(“R

bug:描述 在進行tensorflow進行搭建CNN網絡時&#xff0c;在定義CNN的py文件中調用cnn模型&#xff0c;運行正常&#xff0c;但是在其他py文件中進行時就出現問題 ValueError: Tensor(“Variable:0” dtypefloat32_ref) must be from the same graph as Tensor(“Reshape:0”,…