1、設置窗口圖標
設置窗口圖標需要使用QApplication類下的setWindowIcon方法,會在窗口的左上角顯示圖標。setWindowIcon方法需要傳入一個圖像文件路徑,文件格式可以使用png、jpg等。建議使用png格式,因為png格式支持透明背景。setWindowIcon方法還需要調用QIcon類。代碼如下:
app = QApplication(sys.argv) ... w.setWindowTitle('串口調試程序') app.setWindowIcon(QIcon('computerIcon.png')) ...
2、顯示提示框
提示框就是一個無法獲得焦點的窗口。通常用提示框作為實時幫助或提示使用。例如,當鼠標放在一個按鈕上,就會顯示這個按鈕的作用和使用方法。提示框需要使用QWidget類的setToolTip方法創建。任何可視化控件類都有這個方法,因為可視化控件類是從QWidget類派生的。用法如下:
from PyQt5.QtWidgets import QApplication, QWidget,QToolTip
from PyQt5.QtGui import QIcon,QFont
...
QToolTip.setFont(QFont('Arial',12))
w.setToolTip('測試提示框')
...
3、關閉窗口
關閉窗口可以直接使用系統內置的quit方法,如果單擊按鈕關閉窗口,可以直接將按鈕的單擊事件與quit綁定。下面例子是在窗口上添加一個按鈕,單擊該按鈕關閉窗口,同時會退出整個應用程序。
import sys import PyQt5.QtWidgets as PQW import PyQt5.QtCore as PQC if __name__ == '__main__': app = PQW.QApplication(sys.argv) w = PQW.QWidget() w.setGeometry(300,300,300,220) w.setWindowTitle('關閉窗口') qbtn = PQW.QPushButton('Quit',w)
# 將按鈕的單擊事件與quit綁定。 qbtn.clicked.connect(PQC.QCoreApplication.instance().quit) qbtn.resize(qbtn.sizeHint()) qbtn.move(50,50) w.show() sys.exit(app.exec_())
4、消息盒子
消息盒子(MessageBox)其實就是各種類型的消息對話框,如信息對話框,警告對話框,詢問對話框等等。這些對話框的主要區別主要是對話框的圖標以及按鈕個數。QMessageBox類提供了若干個靜態方法可以顯示各種類型的對話框,如information方法用於顯示信息對話框,waring方法用於顯示告警對話框,question方法用於顯示詢問對話框。這些方法的使用都是類似的。參考下列:
import sys import PyQt5.QtWidgets as PQW import PyQt5.QtCore as PQC class MessageBox(PQW.QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setGeometry(100,100,500,500) self.setWindowTitle('消息盒子') self.show() # 關閉窗口事件 def closeEvent(self,event): # 顯示詢問對話框 reply = PQW.QMessageBox.question(self,'消息',"你真的要退出嗎?", PQW.QMessageBox.Yes | PQW.QMessageBox.No, PQW.QMessageBox.No) if reply==PQW.QMessageBox.Yes: #調用event的accept方法才會真正關閉窗口 event.accept() else: # 調用event的ignore方法取消窗口的關閉動作 event.ignore() if __name__ == '__main__': app = PQW.QApplication(sys.argv) ex = MessageBox() sys.exit(app.exec_())
運行顯示效果:
本例中,采用了面向對象的方式將與窗口相關的代碼都封裝在了自定義的MessageBox類中,這是編寫PyQt5程序的常用方式。
closeEvent方法是窗口的關閉事件方法,當窗口關閉時,會首先調用該方法。這個方法的調用是自動的,不需要干預,也不需要注冊該方法。方法名字必須叫closeEvent。
closeEvent方法的第二個參數是與關閉事件有關的對象。其中,accept方法會讓窗口關閉,ignore方法會取消窗口關閉動作。如果這兩個方法都不調用,那么窗口仍然會關閉。
5、窗口居中
窗口對象(QWidget)並沒有直接提供讓窗口居中的方法,不過可以曲線救國。根據窗口的寬度,高度,以及屏幕的寬度和高度,計算出窗口左上角的坐標,然后使用窗口對象的move()方法將窗口移動到中心的位置。計算方法如下:
代碼實現:
import sys import PyQt5.QtWidgets as PQW class CenterWindow(PQW.QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.resize(250,250) self.center() self.setWindowTitle('窗口居中') self.show() def center(self): desktop = app.desktop() self.move((desktop.width() - self.width())/2, (desktop.height() - self.height())/2) if __name__ == '__main__': app = PQW.QApplication(sys.argv) ex = CenterWindow() sys.exit(app.exec_())