首先来熟悉一下PyQT5的一些常用的属性和用法,以及在函数代码定义,构造,声明,调用等操作的时候的写法。
话不多说直接上代码:
import sys
from PyQt5 import QtWidgets, QtCore
from datetime import datetime
import pytz
class MainWindow(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("时区转换器")
self.setFixedSize(400, 300)
# 创建一个DateTime框
self.dateTimeEdit = QtWidgets.QDateTimeEdit(self)
self.dateTimeEdit.setDateTime(QtCore.QDateTime.currentDateTime())
self.dateTimeEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
# 创建四个按钮
self.button1 = QtWidgets.QPushButton("中国时间", self)
self.button2 = QtWidgets.QPushButton("欧盟时间", self)
self.button3 = QtWidgets.QPushButton("韩国时间", self)
self.button4 = QtWidgets.QPushButton("巴西时间", self)
# 设置布局
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.dateTimeEdit)
layout.addWidget(self.button1)
layout.addWidget(self.button2)
layout.addWidget(self.button3)
layout.addWidget(self.button4)
# 绑定点击事件
self.button1.clicked.connect(self.show_china_time)
self.button2.clicked.connect(self.show_eu_time)
self.button3.clicked.connect(self.show_korea_time)
self.button4.clicked.connect(self.show_brazil_time)
def show_china_time(self):
tz = pytz.timezone('Asia/Shanghai')
now = datetime.now(tz).strftime('%Y-%m-%d %H:%M:%S')
self.dateTimeEdit.setDateTime(QtCore.QDateTime.fromString(now, 'yyyy-MM-dd HH:mm:ss'))
def show_eu_time(self):
tz = pytz.timezone('Europe/Paris')
now = datetime.now(tz).strftime('%Y-%m-%d %H:%M:%S')
self.dateTimeEdit.setDateTime(QtCore.QDateTime.fromString(now, 'yyyy-MM-dd HH:mm:ss'))
def show_korea_time(self):
tz = pytz.timezone('Asia/Seoul')
now = datetime.now(tz).strftime('%Y-%m-%d %H:%M:%S')
self.dateTimeEdit.setDateTime(QtCore.QDateTime.fromString(now, 'yyyy-MM-dd HH:mm:ss'))
def show_brazil_time(self):
tz = pytz.timezone('America/Sao_Paulo')
now = datetime.now(tz).strftime('%Y-%m-%d %H:%M:%S')
self.dateTimeEdit.setDateTime(QtCore.QDateTime.fromString(now, 'yyyy-MM-dd HH:mm:ss'))
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
在上面的代码中有几个用法需要强调一下:
①在self.setFixedSize(400, 300)这段当中用到了setFixSize函数来设置窗口的大小,但实际上除了这种用法之外还有一种是resSize函数,
二者的区别就是:前者是固定的窗口大小,后者相反,换句话说就是使用setFixSize设置了窗口大小之后,窗口的大小将不能再外部改变(只能修改代码里面的参数),而resSize函数只是一个初始的大小,还可以通过鼠标拖动或者放大的操作来更改窗口的大小。
②在self.button1.clicked.connect(self.show_china_time)这段当中用到了QT当中最常用的一种用法就是:槽函数(用户处理函数),常用的为clicked()和toggled()
二者的区别就是:clicked()是在用户点击一个可点击的界面元素(例如按钮)时触发的事件。该事件表示用户已经完成了一次点击行为。toggled()是在用户改变了一个可切换状态的界面元素(例如复选框、开关按钮)的状态时触发的事件。这意味着用户从一个状态切换到了另一个状态。
③在layout = QtWidgets.QVBoxLayout(self)这整段当中都使用了QT当中的布局函数,QVBoxLayout为垂直布局,除此之外还有QHBoxLayout水平布局、QGridLayout网格布局、QFormLayout表单布局、QStackedLayout堆叠布局、QGridLayout栅格布局等,布局在QT当中也是占比较重的一个模块。
其实很简单就能看出来PyQT5的框架结构就是:
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("xxx") # xxx为窗口的名称
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
这两部分是PyQT5书写时不变的架构,创建了一个名为MainWindow的窗口类,它继承自QMainWindow。使用self.setWindowTitle定义窗口的标签。而最后使用if __name__ == '__main__':作为整个函数的入口,创建了一个QApplication对象app
,实例化了MainWindow窗口类,并调用show方法显示窗口。在最后,使用sys.exit(app.exec())
来启动应用程序的事件循环并确保程序正常退出。