pyQt5 是一个集成度非常高的 python 工具包, 几句代码就可以生成一个小窗口
例:
import sys
from PyQt5 import QtWidgets, QtCore
app = QtWidgets.QApplication(sys.argv)
widget = QtWidgets.QWidget()
widget.resize(400, 100)
widget.setWindowTitle("This is a demo for PyQt Widget.")
widget.show()
exit(app.exec_())
每一pyqt5应用程序必须创建一个应用程序对象。sys.argv参数是一个列表,从命令行输入参数。
app = QtWidgets.QApplication(sys.argv)
QWidget部件是pyqt5所有用户界面对象的基类。他为QWidget提供默认构造函数。默认构造函数没有父类。
widget = QtWidgets.QWidget()
resize()方法调整窗口的大小。这离是400px宽100px高
widget.resize(400, 100)
move()方法移动窗口在屏幕上的位置到x = 300,y = 300坐标。
widget.move(300, 300)
设置窗口的标题
widget.setWindowTitle("This is a demo for PyQt Widget.")
上例我们使用的是python 的脚本 实现,下面我们使用 python OOP 面向对象写一个提示语的例程。
import sys
from PyQt5.QtWidgets import (QWidget, QToolTip,
QPushButton, QApplication)
from PyQt5.QtGui import QFont
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
#这种静态的方法设置一个用于显示工具提示的字体。我们使用10px滑体字体。
QToolTip.setFont(QFont('SansSerif', 10))
#创建一个提示,我们称之为settooltip()方法。我们可以使用丰富的文本格式
self.setToolTip('This is a <b>QWidget</b> widget')
#创建一个PushButton并为他设置一个tooltip
btn = QPushButton('Button', self)
btn.setToolTip('This is a <b>QPushButton</b> widget')
#btn.sizeHint()显示默认尺寸
btn.resize(btn.sizeHint())
#移动窗口的位置
btn.move(50, 50)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Tooltips')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
运行结果:
当我们需要把这个按钮功能修改为关闭窗口功能时 需要添加一下代码。
qbtn = QPushButton('Quit', self)
qbtn.clicked.connect(QCoreApplication.instance().quit)
qbtn.resize(qbtn.sizeHint())
qbtn.move(50, 50)
可以看到 按钮 点击事件连接的是 app 的 quit 功能。
点击quit 按钮 程序就直接退出了。
通常情况下 我们关闭窗口后窗口就直接关闭了,但有很多时候 在关闭窗口之前要对程序和数据做一些最后的处理的时候。我们可以对关闭窗口的时候,触发了QCloseEvent 进行重写。
def closeEvent(self, event):
reply = QMessageBox.question(self, 'Message',
"Are you sure to quit?", QMessageBox.Yes |
QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
这里在关闭时显示一个消息框,使用消息框需要引入消息框类
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication, QMessageBox
我们处理返回值,如果单击Yes按钮,关闭小部件并终止应用程序。否则我们忽略关闭事件。
qbtn.clicked.connect(QCoreApplication.instance().quit) 这句 修改为
qbtn.clicked.connect(self.closeEvent)
效果图:
下面的脚本显示了如何在屏幕中心显示窗口
#控制窗口显示在屏幕中心的方法
def center(self):
#获得窗口
qr = self.frameGeometry()
#获得屏幕中心点
cp = QDesktopWidget().availableGeometry().center()
#显示到屏幕中心
qr.moveCenter(cp)
self.move(qr.topLeft())
完整代码:
import sys
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication, QMessageBox, QDesktopWidget
from PyQt5.QtCore import QCoreApplication
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
#qbtn = QPushButton('Quit', self)
#qbtn.clicked.connect(self.closeEvent)
#qbtn.resize(qbtn.sizeHint())
#qbtn.move(70, 70)
self.center()
self.setWindowTitle('Qt Demo1')
self.show()
def closeEvent(self, event):
reply = QMessageBox.question(self, 'Message',
"Are you sure to quit?", QMessageBox.Yes |
QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
# 控制窗口显示在屏幕中心的方法
def center(self):
# 获得窗口
qr = self.frameGeometry()
# 获得屏幕中心点
cp = QDesktopWidget().availableGeometry().center()
# 显示到屏幕中心
qr.moveCenter(cp)
self.move(qr.topLeft())
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())