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_())