φυβλαςのβλογ
phyblas的博客



pyqt เบื้องต้น บทที่ ๑๔: การสร้างและใช้งานช่องปรับวันที่และเวลา
เขียนเมื่อ 2021/08/16 12:13
แก้ไขล่าสุด 2021/09/28 16:42

ต่อจาก บทที่ ๑๓

ในบทนี้จะแนะนำ widget ที่เอาไว้ใช้ปรับค่าวันที่และเวลา นั่นคือ QDateTimeEdit, QDateEdit และ QTimeEdit




การสร้างช่องปรับวันที่และเวลา {QDateTimeEdit QDateEdit QTimeEdit}

QDateTimeEdit QDateEdit QTimeEdit นั้นต่างก็มีไว้ใช้เพื่อปรับค่าวันที่และเวลา

ข้อแตกต่างคือ QDateTimeEdit เป็นช่องปรับทั้งวันที่และเวลา QDateEdit เป็นช่องปรับแค่วันที่ QTimeEdit เป็นช่องปรับแค่เวลา

ขอเริ่มแสดงตัวอย่างการใช้งานโดยลองสร้างทั้ง widget ทั้ง ๓ ชนิดนี้ขึ้นมาแสดงในที่นี้ดู
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QDateTimeEdit,QDateEdit,QTimeEdit,QVBoxLayout

qAp = QApplication(sys.argv)
natang = QWidget()
vbl = QVBoxLayout()
natang.setLayout(vbl)
# ช่องปรับวันที่กับเวลา
wanwela = QDateTimeEdit()
vbl.addWidget(wanwela)
# ช่องปรับแค่วันที่
wanthi = QDateEdit()
vbl.addWidget(wanthi)
# ช่องปรับแค่เวลา
kimong = QTimeEdit()
vbl.addWidget(kimong)

natang.show()
qAp.exec_()

ก็จะได้ออกมาแบบนี้

ก็จะได้ช่องทั้ง ๓ แบบออกมาดังนี้



ซึ่งจะเห็นว่าค่าตั้งต้นหากไม่ได้กำหนดอะไรก็จะเป็น 2000/01/01 เวลา 0.00 น. แต่หากต้องการเปลี่ยนค่าตั้งต้นก็ทำได้




การตั้งวันที่และเวลา {QDatetime QDate QTime}

การปรับวันที่หรือเวลาทำได้โดยใช้เมธอด .setDateTime .setDate .setTime โดยสิ่งที่ต้องใส่ลงไปคือออบเจ็กต์ชนิด QDatetime QDate QTime ตามลำดับ ซึ่งแต่ละตัวนั้นเรียกใช้ได้จากใน PyQt5.QtCore

ออบเจ็กต์ทั้ง ๓ นี้เวลาสร้างขึ้นใส่อาร์กิวเมนต์ดังนี้
QDateTime(ปี,เดือน,วัน,ชั่วโมง,นาที)
QDate(ปี,เดือน,วัน)
QTime(ชั่วโมง,นาที)

นอกจากนี้ยังสามารถใส่เวลาละเอียดถึงหน่วยวินาทีลงไปได้โดยใส่คีย์เวิร์ด second และมิลลิวินาทีได้เป็น msec แต่ในที่นี้จะขอพูดถึงหลักนาทีขึ้นไปเท่านั้นก็พอ

ตัวอย่างการใช้
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QDateTimeEdit,QDateEdit,QTimeEdit,QVBoxLayout
from PyQt5.QtCore import QDateTime,QDate,QTime

qAp = QApplication(sys.argv)
natang = QWidget()
vbl = QVBoxLayout()
natang.setLayout(vbl)
# ช่องปรับวันที่กับเวลา
wanwela = QDateTimeEdit()
vbl.addWidget(wanwela)
wanwela.setDateTime(QDateTime(2021,8,16,20,30)) # ตั้งวันที่และเวลา
# ช่องปรับแค่วันที่
wanthi = QDateEdit()
vbl.addWidget(wanthi)
wanthi.setDate(QDate(2021,8,17)) # ตั้งวันที่
# ช่องปรับแค่เวลา
kimong = QTimeEdit()
vbl.addWidget(kimong)
kimong.setTime(QTime(19,45)) # ตั้งเวลา

natang.show()
qAp.exec_()

ก็จะได้ค่าเวลาตามที่ตั้งเอาไว้แบบนี้






การเอาค่าวันที่และเวลาจากในช่อง {.dateTime .date .time}

หากต้องการจะเอาค่าวันที่หรือเวลาที่อยู่ในกล่องปรับก็อาจใช้เมธอด .dateTime .date .time

โดย .date จะได้เป็นออบเจ็กต์ QDate ซึ่งมีเมธอด .day .month .year ไว้แสดงค่าวันเดือนปี

ส่วน .time จะได้ออบเจ็กต์ QTime ซึ่งใช้เมธอด .hour .minute ในการแสดงชั่วโมงและนาที

ตัวอย่าง ลองทำให้เมื่อกดปุ่มแล้วเอาค่าวันเวลาที่เลือกไว้มาแสดง
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QDateTimeEdit,QVBoxLayout,QPushButton,QLabel

qAp = QApplication(sys.argv)
natang = QWidget()
natang.setStyleSheet('font-family: Tahoma; font-size: 18px')
vbl = QVBoxLayout()
natang.setLayout(vbl)
wanwela = QDateTimeEdit()
vbl.addWidget(wanwela)

khokhwam = QLabel('--')
vbl.addWidget(khokhwam)

pumkot = QPushButton('แสดงเวลา')
vbl.addWidget(pumkot)
def khian():
    print(wanwela.dateTime())
    wanthi = wanwela.date()
    wela = wanwela.time()
    wan = wanthi.day()
    duean = wanthi.month()
    pi = wanthi.year()
    chuamong = wela.hour()
    nathi = wela.minute()
    khokhwam.setText('วันที่ %d เดือน %d ปี %d\nเวลา %02d:%02d'%(wan,duean,pi,chuamong,nathi))
pumkot.clicked.connect(khian)

natang.show()
qAp.exec_()

ก็จะได้หน้าต่างแบบนี้ซึ่งพอลองกดปุ่มก็จะขึ้นข้อความตามวันเวลาที่เลือกในช่อง






การทำคำสั่งเมื่อมีการเปลี่ยนแปลงวันและเวลา {.dateTimeChanged .dateChanged .timeChanged}

หากต้องการให้เกิดการทำอะไรเมื่อมีการเปลี่ยนแปลงวันหรือเวลาในช่องปรับวันที่และเวลาก็ตั้งได้ที่ .dateTimeChanged หรือ .dateChanged หรือ .timeChanged

.dateChanged จะทำงานเมื่อวันที่ถูกปรับ และได้พารามิเตอร์เป็นวันที่ใหม่ ส่วน .timeChanged จะทำงานเมื่อเวลาถูกปรับ และได้พารามิเตอร์เป็นเวลาใหม่

ตัวอย่างเช่นลองสร้างช่องปรับวันที่และช่องปรับเวลา แล้วตั้งให้พอมีการเปลี่ยนแปลงก็พิมพ์แสดงข้อความออกมา
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QDateEdit,QTimeEdit,QVBoxLayout

qAp = QApplication(sys.argv)
natang = QWidget()
natang.setStyleSheet('font-family: Tahoma; font-size: 18px')
vbl = QVBoxLayout()
natang.setLayout(vbl)

def khianwanthi(wanthi):
    wan = wanthi.day()
    duean = wanthi.month()
    pi = wanthi.year()
    print('วันที่ %d เดือน %d ปี %d'%(wan,duean,pi))

chongwanthi = QDateEdit()
vbl.addWidget(chongwanthi)
chongwanthi.dateChanged.connect(khianwanthi)

def khianwela(wela):
    chuamong = wela.hour()
    nathi = wela.minute()
    print('เวลา %02d:%02d'%(chuamong,nathi))

chongwela = QTimeEdit()
vbl.addWidget(chongwela)
chongwela.timeChanged.connect(khianwela)

natang.show()
qAp.exec_()

ก็จะได้หน้าต่างแบบนี้ออกมา ซึ่งถ้าลองกดปรับวันที่หรือเวลาก็จะมีการพิมพ์ข้อความออกมา






การแสดงปฏิทิน {.setCalendarPopup}

หากต้องการให้ขึ้นปฏิทินเวลาที่จะเลือกวันที่ก็สามารถตั้ง .setCalendarPopup ให้เป็น True จากนั้นทางขวาก็จะมีปุ่มที่พอกดแล้วปฏิทินจะขึ้นมาให้เลือก

ตัวอย่าง
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QDateTimeEdit,QHBoxLayout

qAp = QApplication(sys.argv)
natang = QWidget()
hbl = QHBoxLayout()
natang.setLayout(hbl)
wanwela = QDateTimeEdit()
hbl.addWidget(wanwela)
wanwela.setCalendarPopup(True) # ตั้งให้แสดงปฏิทิน
natang.show()
qAp.exec_()

พอกดปุ่มก็จะได้ปฏิทินออกมาแบบนี้ ใช้คลิกเลือกวันที่ได้ โดยภาษาที่ขึ้นก็ขึ้นอยู่กับ locale ของเครื่องที่ตั้งไว้ ซึ่งในที่นี้เป็นภาษาจีนเพราะใช้เครื่องภาษาจีนอยู่ แต่หากต้องการจะเปลี่ยนภาษาก็ทำได้โดยการปรับ locale






การปรับ locale ในปฏิทิน {.calendarWidget .setLocale}

การตั้ง locale ที่แสดงในปฏิทินนั้น ทำได้โดยใช้ .setLocale โดยจะปรับที่ตัวออบเจ็กต์ช่องปรับวันที่ หรือจะไปปรับที่ตัวออบเจกต์ปฏิทินโดยตรงก็ได้

หากต้องการปรับแต่งอะไรต่างๆในปฏิทินที่จะปรากฏขึ้นมากับช่องปรับวันที่นั้นทำได้โดยใช้เมธอด .calendarWidget() แล้วก็จะได้ตัวออบเจ็กต์ปฏิทินออกมา

จากนั้นก็เอาตัวปฏิทินที่ได้มานี้มาปรับแต่งอะไรต่อได้ เช่น .setLocale เพื่อปรับ locale เพื่อเปลี่ยนให้เป็นภาษาตามที่ต้องการ หรืออาจใช้ปรับรูปแบบด้วย .setStyleSheet ก็ได้เช่นกัน

ตัวอย่าง ลองสร้างช่องแก้วันที่ซึ่งให้ภาษาของปฏิทินต่างกันออกไป
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QDateEdit,QVBoxLayout
from PyQt5.QtCore import QLocale

qAp = QApplication(sys.argv)
natang = QWidget()
natang.setStyleSheet('font-family: Tahoma; font-size: 18px')
vbl = QVBoxLayout()
natang.setLayout(vbl)
# ให้สร้างช่องปรับวันที่ โดยเปลี่ยนภาษาไปเรื่อยๆ
for phasa in ['ja','th','lo','vi','zh-tw']:
    chongwanthi = QDateEdit() # สร้างช่องวันที่
    vbl.addWidget(chongwanthi)
    chongwanthi.setCalendarPopup(True) # ตั้งให้แสดงปฏิทิน
    chongwanthi.setStyleSheet('background-color: #cff;') # ปรับสีช่องปรับวันที่
    patithin = chongwanthi.calendarWidget() # เอาตัวออบเจ็กต์ปฏิทินออกมา
    patithin.setLocale(QLocale(phasa)) # ตั้ง locale
    # chongwanthi.setLocale(QLocale(phasa)) # เขียนแบบนี้ก็เปลี่ยนภาษาได้เหมือนกัน
    patithin.setStyleSheet('background-color: #fbd;') # ปรับสีปฏิทิน

natang.show()
qAp.exec_()

ก็จะได้ช่องวันที่ออกมา ๕ ช่อง ลงกดดูปฏิทินแต่ละอันดู อย่างในภาพนี้กดแสดงภาษาลาว






สรุปท้ายบท

ในบทนี้ที่ได้แสดงวิธีใช้กล่องปรับวันที่และเวลาในเบื้องต้นไปแล้ว ที่จริงแล้วมีรายละเอียดอีกมาก ซึ่งในที่นี้ยังไม่ได้กล่าวถึง สามารถลองศึกษาและปรับแต่งเพิ่มเติมดูได้



อ่านบทถัดไป >> บทที่ ๑๕





-----------------------------------------

囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧

ดูสถิติของหน้านี้

หมวดหมู่

-- คอมพิวเตอร์ >> เขียนโปรแกรม >> python >> pyqt

ไม่อนุญาตให้นำเนื้อหาของบทความไปลงที่อื่นโดยไม่ได้ขออนุญาตโดยเด็ดขาด หากต้องการนำบางส่วนไปลงสามารถทำได้โดยต้องไม่ใช่การก๊อปแปะแต่ให้เปลี่ยนคำพูดเป็นของตัวเอง หรือไม่ก็เขียนในลักษณะการยกข้อความอ้างอิง และไม่ว่ากรณีไหนก็ตาม ต้องให้เครดิตพร้อมใส่ลิงก์ของทุกบทความที่มีการใช้เนื้อหาเสมอ

目录

从日本来的名言
模块
-- numpy
-- matplotlib

-- pandas
-- manim
-- opencv
-- pyqt
-- pytorch
机器学习
-- 神经网络
javascript
蒙古语
语言学
maya
概率论
与日本相关的日记
与中国相关的日记
-- 与北京相关的日记
-- 与香港相关的日记
-- 与澳门相关的日记
与台湾相关的日记
与北欧相关的日记
与其他国家相关的日记
qiita
其他日志

按类别分日志



ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ

  查看日志

  推荐日志

ตัวอักษรกรีกและเปรียบเทียบการใช้งานในภาษากรีกโบราณและกรีกสมัยใหม่
ที่มาของอักษรไทยและความเกี่ยวพันกับอักษรอื่นๆในตระกูลอักษรพราหมี
การสร้างแบบจำลองสามมิติเป็นไฟล์ .obj วิธีการอย่างง่ายที่ไม่ว่าใครก็ลองทำได้ทันที
รวมรายชื่อนักร้องเพลงกวางตุ้ง
ภาษาจีนแบ่งเป็นสำเนียงอะไรบ้าง มีความแตกต่างกันมากแค่ไหน
ทำความเข้าใจระบอบประชาธิปไตยจากประวัติศาสตร์ความเป็นมา
เรียนรู้วิธีการใช้ regular expression (regex)
การใช้ unix shell เบื้องต้น ใน linux และ mac
g ในภาษาญี่ปุ่นออกเสียง "ก" หรือ "ง" กันแน่
ทำความรู้จักกับปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง
ค้นพบระบบดาวเคราะห์ ๘ ดวง เบื้องหลังความสำเร็จคือปัญญาประดิษฐ์ (AI)
หอดูดาวโบราณปักกิ่ง ตอนที่ ๑: แท่นสังเกตการณ์และสวนดอกไม้
พิพิธภัณฑ์สถาปัตยกรรมโบราณปักกิ่ง
เที่ยวเมืองตานตง ล่องเรือในน่านน้ำเกาหลีเหนือ
ตระเวนเที่ยวตามรอยฉากของอนิเมะในญี่ปุ่น
เที่ยวชมหอดูดาวที่ฐานสังเกตการณ์ซิงหลง
ทำไมจึงไม่ควรเขียนวรรณยุกต์เวลาทับศัพท์ภาษาต่างประเทศ