φυβλαςのβλογ
บล็อกของ 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
ภาษา mongol
ภาษาศาสตร์
maya
ความน่าจะเป็น
บันทึกในญี่ปุ่น
บันทึกในจีน
-- บันทึกในปักกิ่ง
-- บันทึกในฮ่องกง
-- บันทึกในมาเก๊า
บันทึกในไต้หวัน
บันทึกในยุโรปเหนือ
บันทึกในประเทศอื่นๆ
qiita
บทความอื่นๆ

บทความแบ่งตามหมวด



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

  ค้นหาบทความ

  บทความแนะนำ

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

บทความแต่ละเดือน

2024年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2023年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2022年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2021年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2020年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

ค้นบทความเก่ากว่านั้น

ไทย

日本語

中文