PyQt6从入门到放弃
安装PyQt6
pip install PyQt6
# 查看QT和PyQT的版本
from PyQt6.QtCore import QT_VERSION_STR
from PyQt6.QtCore import PYQT_VERSION_STR
print(QT_VERSION_STR)
print(PYQT_VERSION_STR)
PyQt6模块
PyQt6类由一系列模块组成包括QtCore、QtGui、QtWidgets等模块。
QtCore
模块式非GUI的核心库,用来处理时间、文件、目录、各种类型的数据、流、URLs、mime类型、线程和进程。QtGui
有窗口系统集成、事件处理、2D图形、基本图像、字体、文本的类。QtWidgets
有创建用户界面的类。QtDBus
使用D-Bus处理IPC通讯的类。QtNetwork
是网络编程类,QtHelp
包含了创建、查看和搜索文档的类。QtXml
包含了处理XML文件的类。QtSvg
提供了显示SVG的类,QtSql
提供了数据库的类,QtTest
提供了单元测试的类。
日期和事件
(1)当前日期和时间
from PyQt6.QtCore import QDate, QTime, QDateTime, Qt
# currentDate获得当前日期
now = QDate.currentDate()
# 2024-03-19
print(now.toString(Qt.DateFormat.ISODate))
# 19 Mar 2024
print(now.toString(Qt.DateFormat.RFC2822Date))
# currentDateTime获取当前的日期和时间
datetime = QDateTime.currentDateTime()
# Tue Mar 19 23:03:06 2024
print(datetime.toString())
# currentTime获取当前时间
time = QTime.currentTime()
# 23:03:06
print(time.toString(Qt.DateFormat.ISODate))
(2)UTC时间
from PyQt6.QtCore import QDateTime, Qt
# 获取本地时间的当前时间
now = QDateTime.currentDateTime()
# 当前时间: 2024-03-23T14:04:45
print('当前时间:', now.toLocalTime().toString(Qt.DateFormat.ISODate))
# 从时间对象中获取标准时间 UTC时间: 2024-03-23T06:04:45Z
print('UTC时间:', now.toUTC().toString(Qt.DateFormat.ISODate))
# 本地时间和标准时间的差异: 28800 seconds
print(f'本地时间和标准时间的差异: {
now.offsetFromUtc()} seconds')
# 当前时间: 2024-03-23T14:04:45
print('当前时间:', now.toString(Qt.DateFormat.ISODate))
(3)天数
from PyQt6.QtCore import QDate
now = QDate.currentDate()
d = QDate(2024, 4, 23)
# 2024年4月有30天
print(f'2024年4月有{
d.daysInMonth()}天')
# 2024年有366天
print(f'2024年有{
d.daysInYear()}天')
(4)天数差
from PyQt6.QtCore import QDate, Qt
now = QDate.currentDate()
y = now.year()
# 今天是2024-03-23
print(f'今天是{
now.toString(Qt.DateFormat.ISODate)}')
xmas1 = QDate(y-1, 12, 25)
xmas2 = QDate(y, 12, 25)
dayspassed = xmas1.daysTo(now)
# 从2023-12-25已经过了89天
print(f'从{
xmas1.toString(Qt.DateFormat.ISODate)}已经过了{
dayspassed}天')
nofdays = now.daysTo(xmas2)
# 距离2024-12-25还剩277天
print(f'距离{
xmas2.toString(Qt.DateFormat.ISODate)}还剩{
nofdays}天')
(5)时间的计算
from PyQt6.QtCore import QDateTime, Qt
now = QDateTime.currentDateTime()
# 今天是2024-03-23T14:28:07
print(f'今天是{
now.toString(Qt.DateFormat.ISODate)}')
# 12天后是2024-04-04T14:28:07
print(f'12天后是{
now.addDays(12).toString(Qt.DateFormat.ISODate)}')
# 12天前是2024-03-11T14:28:07
print(f'12天前是{
now.addDays(-12).toString(Qt.DateFormat.ISODate)}')
# 50秒后是2024-03-23T14:28:57
print(f'50秒后是{
now.addSecs(50).toString(Qt.DateFormat.ISODate)}')
# 3分钟后是2024-06-23T14:28:07
print(f'3分钟后是{
now.addMonths(3).toString(Qt.DateFormat.ISODate)}')
# 10年后是2034-03-23T14:28:07
print(f'10年后是{
now.addYears(10).toString(Qt.DateFormat.ISODate)}')
PyQt6显示窗口小程序
import sys
from PyQt6.QtWidgets import QApplication, QWidget
def main():
# 每个应用程序都必须创建一个应用程序对象
# sys.argv是来自命令行的参数
app = QApplication(sys.argv)
# QWidget小部件是所有用户界面对象的基类,提供了默认的构造函数
w = QWidget()
# 改变小部件的尺寸,宽250像素,高150像素
w.resize(250, 200)
# 小部件移动到屏幕的指定坐标
w.move(300, 300)
# 设置窗口标题
w.setWindowTitle('Simple')
# 在屏幕上显示小部件
w.show()
# 如果调用exit方法或小部件被销毁则主循环结束
sys.exit(app.exec())
if __name__ == '__main__':
main()
气泡提示小程序
import sys
from PyQt6.QtWidgets import (QApplication, QWidget, QToolTip, QPushButton)
from PyQt6.QtGui import QFont
class Bubble(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
QToolTip.setFont(QFont('SansSerif', 10))
self.setToolTip('这是一个<b>小部件</b>')
btn = QPushButton('QPushButton', self)
# 创建气泡提示框
btn.setToolTip('这是一个<b>QPushButton</b>小部件')
# 给按钮一个系统建议的尺寸
btn.resize(btn.sizeHint())
btn.move(50, 50)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('提示框')
self.show()
def main():
app = QApplication(sys.argv)
w = Bubble()
sys.exit(app.exec())
if __name__ == '__main__':
main()
退出按钮
import sys
from PyQt6.QtWidgets import (QApplication, QWidget, QToolTip, QPushButton)
from PyQt6.QtGui import QFont
class Bubble(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 参数1是按钮的标签,参数2是父级小部件
qbtn = QPushButton('Quit', self)
# 事件处理系统是信号和插槽机制构成的,点击按钮会发出点击信号
# QApplication.instance获取QCoreApplication对象包含事件主循环,处理和分派所有事件
# 点击的信号连接到终止应用程序的退出方法
qbtn.clicked.connect(QApplication.instance().quit)
qbtn.resize(qbtn.sizeHint())
qbtn.move(50, 50)
self.setGeometry(300, 300, 350, 250)
self.setWindowTitle('Quit Button')
self.show()
def main():
app = QApplication(sys.argv)
w = Bubble()
sys.exit(app.exec())
if __name__ == '__main__':
main()
弹框
点击关闭时弹出确认框确认是否关闭。
import sys
from PyQt6.QtWidgets import (QApplication, QWidget, QMessageBox)
class Popup(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 350, 250)
self.setWindowTitle('消息框')
self.show()
def closeEvent(self, event):
reply = QMessageBox.question(self, 'Message', '确定退出?', QMessageBox.StandardButton.Yes|QMessageBox.StandardButton.No,
QMessageBox.StandardButton.No)
if reply == QMessageBox.StandardButton.Yes:
event.accept()
else:
event.ignore()
def main():
app = QApplication(sys.argv)
w = Popup()
sys.exit(app.exec())
if __name__ == '__main__':
main()
窗口居中显示
import sys
from PyQt6.QtWidgets import (QApplication, QWidget, QMessageBox)
class Popup(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.resize(350, 250)
self.center()
self.setWindowTitle('居中')
self.show()
def center(self):
# 得到一个矩形窗口
qr = self.frameGeometry()
# 从屏幕属性中计算出分辨率
cp = self.screen().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
def main():
app = QApplication(sys.argv)
w = Popup()
sys.exit(app.exec())
if __name__ == '__main__':
main()
菜单和工具栏
QMainWindow
类提供了主程序窗口,可以创建一个具有状态栏、工具栏和菜单栏的经典应用框架。
(1)状态栏显示就绪
import sys
from PyQt6.QtWidgets import (QApplication, QMainWindow)
class StateColumn(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.statusBar().showMessage('就绪')
self.setGeometry(300, 300, 250, 250)
self.setWindowTitle('状态栏')
self.show()
def main()