QDateEdit 日期调整元件
QDateEdit 是 PyQt6 里的日期调整元件,这篇教学会介绍如何在 PyQt6 视窗里加入 QDateEdit 日期调整元件,并实做透过该元件调整日期并将调整的日期显示出来的简单应用。
快速导览:
因为 Google Colab 不支援 PyQt6,所以请使用本机环境 ( 参考:使用 Python 虚拟环境 ) 或使用 Anaconda Jupyter 进行实作 ( 参考:使用 Anaconda )。
加入 QDateEdit 日期调整元件
建立 PyQt6 视窗对象后,透过 QtWidgets.QDateEdit(widget) 方法,就能在指定的元件中建立日期调整元件,调整时,需要先点击要调整的日期位置,就可以针对该位置的日期进行调整。
from PyQt6 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
date = QtWidgets.QDateEdit(Form) # 建立日期調整元件
date.setGeometry(20,20,100,30) # 設定位置
Form.show()
sys.exit(app.exec())
class 写法:
from PyQt6 import QtWidgets, QtCore
import sys
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('oxxo.studio')
self.resize(300, 200)
self.ui()
def ui(self):
self.date = QtWidgets.QDateEdit(self)
self.date.setGeometry(20,20,100,30)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
日期格式设定
使用 setDisplayFormat() 方法可以调整日期的显示格式,默认“西元年/月/日”显示方式的格式为“yyyy/MM/dd”( 注意大小写不能有错 ),若调整为“dd/MM/yyyy”就会变成“日/月/西元年”,下方的程序码会列出两组不同格式的日期调整元件。
from PyQt6 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
d1 = QtWidgets.QDateEdit(Form)
d1.setGeometry(20,20,100,30)
d1.setDisplayFormat('dd/MM/yyyy') # 設定格式
d2 = QtWidgets.QDateEdit(Form)
d2.setGeometry(130,20,100,30)
d2.setDisplayFormat('yyyy/MM/dd') # 設定格式
Form.show()
sys.exit(app.exec())
class 写法:
from PyQt6 import QtWidgets
import sys
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('oxxo.studio')
self.resize(300, 200)
self.ui()
def ui(self):
self.d1 = QtWidgets.QDateEdit(self)
self.d1.setGeometry(20,20,100,30)
self.d1.setDisplayFormat('dd/MM/yyyy')
self.d2 = QtWidgets.QDateEdit(self)
self.d2.setGeometry(130,20,100,30)
self.d2.setDisplayFormat('yyyy/MM/dd')
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
如果要设定日期调整的范围,需要搭配 QtCore.QDate(y, m, d) 方法,下方的程序码执行后,会将日期调整的范围限制在 2000/1/1~2000/2/1。
from PyQt6 import QtWidgets, QtCore
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
d1 = QtWidgets.QDateEdit(Form)
d1.setGeometry(20,20,100,30)
d1.setDisplayFormat('dd/MM/yyyy')
d1.setDateRange(QtCore.QDate(2000, 1, 1), QtCore.QDate(2000, 2, 1)) # 設定日期範圍
Form.show()
sys.exit(app.exec())
class 写法:
from PyQt6 import QtWidgets, QtCore
import sys
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('oxxo.studio')
self.resize(300, 200)
self.ui()
def ui(self):
self.d1 = QtWidgets.QDateEdit(self)
self.d1.setGeometry(20,20,100,30)
self.d1.setDisplayFormat('dd/MM/yyyy')
self.d1.setDateRange(QtCore.QDate(2000, 1, 1), QtCore.QDate(2000, 2, 1)) # 設定日期範圍
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
日期调整元件常用方法
下方列出 QDateEdit 日期调整元件的常用方法:
| 方法 | 参数 | 说明 |
|---|---|---|
| setDate() | QDate | 设定默认日期。 |
| setDisplayFormat() | format | 日期调整的格式。 |
| setDateRange() | start, end | 日期调整的范围。 |
| setMaximumDate() | QDate | 日期调整范围的最大日期。 |
| setMinimumDate() | QDate | 日期调整范围的最小日期。 |
| dateChanged.connect() | fn | 日期调整时要执行的函数。 |
| editingFinished.connect() | fn | 使用键盘上下键调整后,按下 enter 要执行的函数。 |
| date() | 取得目前调整的日期。 | |
| date().toString() | 取得目前调整的日期转换成字串。 | |
| QtCore.QDate().currentDate() | 取得目前电脑日期。 | |
| QtCore.QDate() | y, m, d | 设定日期。 |
显示日期调整元件的内容
运用 dateChanged.connect(fn) 方法,就能在调整时间时,执行特定的函数,下方的程序码执行后,会透过 QLabel 显示调整的时间。
from PyQt6 import QtWidgets, QtCore
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
label = QtWidgets.QLabel(Form)
label.setGeometry(20,20,120,30)
def show():
label.setText(d1.date().toString())
d1 = QtWidgets.QDateEdit(Form)
d1.setGeometry(150,20,100,30)
d1.setDisplayFormat('dd/MM/yyyy')
d1.setDate(QtCore.QDate().currentDate())
d1.dateChanged.connect(show)
Form.show()
sys.exit(app.exec())
class 的写法 ( 注意不能使用 show 作为方法名称,会覆写基底的 show 方法造成无法显示 ):
from PyQt6 import QtWidgets, QtCore
import sys
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('oxxo.studio')
self.resize(300, 200)
self.ui()
def ui(self):
self.label = QtWidgets.QLabel(self)
self.label.setGeometry(20,20,120,30)
self.d1 = QtWidgets.QDateEdit(self)
self.d1.setGeometry(150,20,100,30)
self.d1.setDisplayFormat('dd/MM/yyyy')
self.d1.setDate(QtCore.QDate().currentDate())
self.d1.dateChanged.connect(self.showDate)
def showDate(self):
self.label.setText(self.d1.date().toString())
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
微信扫码关注
抖音扫码关注