QTimeEdit 时间调整元件
QTimeEdit 是 PyQt6 里的时间调整元件,这篇教学会介绍如何在 PyQt6 视窗里加入 QTimeEdit 时间调整元件,并实做透过该元件调整时间并将调整的时间显示出来的简单应用。
快速导览:
因为 Google Colab 不支援 PyQt6,所以请使用本机环境 ( 参考:使用 Python 虚拟环境 ) 或使用 Anaconda Jupyter 进行实作 ( 参考:使用 Anaconda )。
加入 QTimeEdit 时间调整元件
建立 PyQt6 视窗对象后,透过 QtWidgets.QTimeEdit(widget) 方法,就能在指定的元件中建立时间调整元件。
from PyQt6 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
timeedit = QtWidgets.QTimeEdit(Form)
timeedit.setGeometry(20,20,100,30)
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.timeedit = QtWidgets.QTimeEdit(self)
self.timeedit.setGeometry(20,20,100,30)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
时间格式设定
使用 setDisplayFormat() 方法可以调整时间的显示格式,默认“上午 时:分”显示方式的格式为“ap hh:mm”,若调整为“hh:mm:ss”就会变成 24 小时制并且有秒数,如果调整为“hh:mm:ss ap”,则会变成 12 小时制,上午下午放在最后方,下方的程序码会列出三组不同格式的时间调整元件。
from PyQt6 import QtWidgets, QtCore
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
now = QtCore.QTime.currentTime()
t1 = QtWidgets.QTimeEdit(Form)
t1.setGeometry(20,20,120,30)
t1.setDisplayFormat('hh:mm:ss')
t1.setTime(now)
t2 = QtWidgets.QTimeEdit(Form)
t2.setGeometry(20,60,120,30)
t2.setDisplayFormat('hh:mm ap')
t2.setTime(now)
t3 = QtWidgets.QTimeEdit(Form)
t3.setGeometry(20,100,120,30)
t3.setDisplayFormat('ap hh:mm:ss')
t3.setTime(now)
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):
now = QtCore.QTime.currentTime()
self.t1 = QtWidgets.QTimeEdit(self)
self.t1.setGeometry(20,20,120,30)
self.t1.setDisplayFormat('hh:mm:ss')
self.t1.setTime(now)
self.t2 = QtWidgets.QTimeEdit(self)
self.t2.setGeometry(20,60,120,30)
self.t2.setDisplayFormat('hh:mm ap')
self.t2.setTime(now)
self.t3 = QtWidgets.QTimeEdit(self)
self.t3.setGeometry(20,100,120,30)
self.t3.setDisplayFormat('ap hh:mm:ss')
self.t3.setTime(now)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
如果要设定时间调整的范围,需要搭配 QtCore.QTime(h, m ,s) 方法,下方的程序码执行后,会将时间调整的范围限制在 10:00:00~20:00:00。
from PyQt6 import QtWidgets, QtCore
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
t1 = QtWidgets.QTimeEdit(Form)
t1.setGeometry(20,20,120,30)
t1.setDisplayFormat('hh:mm:ss')
t1.setTimeRange(QtCore.QTime(10, 00, 00), QtCore.QTime(20, 00, 00)) # 設定時間範圍
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.t1 = QtWidgets.QTimeEdit(self)
self.t1.setGeometry(20,20,120,30)
self.t1.setDisplayFormat('hh:mm:ss')
self.t1.setTimeRange(QtCore.QTime(10, 00, 00), QtCore.QTime(20, 00, 00)) # 設定時間範圍
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
时间调整元件常用方法
下方列出 QTimeEdit 时间调整元件的常用方法:
| 方法 | 参数 | 说明 |
|---|---|---|
| setTime() | QTime | 设定默认时间。 |
| setTimeRange() | start, end | 时间调整的范围。 |
| setDisplayFormat() | format | 时间调整的格式。 |
| timeChanged.connect() | fn | 时间调整时要执行的函数。 |
| editingFinished.connect() | fn | 使用键盘上下键调整后,按下 enter 要执行的函数。 |
| time() | 取得目前调整的时间。 | |
| time().toString() | 取得目前调整的时间转换成字串。 | |
| QtCore.QTime.currentTime() | 取得目前电脑时间。 | |
| QtCore.QTime() | h, m, s | 设定时间。 |
显示时间调整元件的内容
运用 timeChanged.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(t1.time().toString()) # 顯示時間
now = QtCore.QTime.currentTime() # 取得目前電腦時間
t1 = QtWidgets.QTimeEdit(Form)
t1.setGeometry(140,20,120,30)
t1.setDisplayFormat('hh:mm:ss')
t1.setTime(now) # 設定時間
t1.setTimeRange(QtCore.QTime(3, 00, 00), QtCore.QTime(23, 30, 00))
t1.timeChanged.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):
now = QtCore.QTime.currentTime() # 取得目前電腦時間
self.label = QtWidgets.QLabel(self)
self.label.setGeometry(20,20,120,30)
self.t1 = QtWidgets.QTimeEdit(self)
self.t1.setGeometry(140,20,120,30)
self.t1.setDisplayFormat('hh:mm:ss')
self.t1.setTime(now) # 設定時間
self.t1.setTimeRange(QtCore.QTime(3, 00, 00), QtCore.QTime(23, 30, 00))
self.t1.timeChanged.connect(self.showTime)
def showTime(self):
self.label.setText(self.t1.time().toString()) # 顯示時間
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
微信扫码关注
抖音扫码关注