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())
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~