QDateEdit 日期調整元件
QDateEdit 是 PyQt5 裡的日期調整元件,這篇教學會介紹如何在 PyQt5 視窗裡加入 QDateEdit 日期調整元件,並實做透過該元件調整日期並將調整的日期顯示出來的簡單應用。
快速導覽:
- PyQt6 版本參考:PyQt6 教學 - QDateEdit 日期調整元件
- 因為 Google Colab 不支援 PyQt5,所以請使用本機環境 ( 參考:使用 Python 虛擬環境 ) 或使用 Anaconda Jupyter 進行實作 ( 參考:使用 Anaconda )。
加入 QDateEdit 日期調整元件
建立 PyQt5 視窗物件後,透過 QtWidgets.QDateEdit(widget)
方法,就能在指定的元件中建立日期調整元件,調整時,需要先點擊要調整的日期位置,就可以針對該位置的日期進行調整。
from PyQt5 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_())
日期格式設定
使用 setDisplayFormat()
方法可以調整日期的顯示格式,預設「西元年/月/日」顯示方式的格式為「yyyy/MM/dd」( 注意大小寫不能有錯 ),若調整為「dd/MM/yyyy」就會變成「日/月/西元年」,下方的程式碼會列出兩組不同格式的日期調整元件。
from PyQt5 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_())
如果要設定日期調整的範圍,需要搭配 QtCore.QDate(y, m, d)
方法,下方的程式碼執行後,會將日期調整的範圍限制在 2000/1/1~2000/2/1。
from PyQt5 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_())
日期調整元件常用方法
下方列出 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 PyQt5 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 的寫法
上方的程式碼,亦可改用 class 的寫法表示。
from PyQt5 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.showMsg)
def showMsg(self):
self.label.setText(self.d1.date().toString())
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec_())
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~