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



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

ต่อจาก บทที่ ๙

ในบทที่แล้วได้พูดถึงกล่องป้อนข้อความไปแล้ว สำหรับบทนี้จะพูดถึง widget อีกตัวที่มักใช้งานบ่อยใน GUI นั่นคือ QCheckBox ซึ่งเป็นช่องติ๊กที่เอาไว้ติ๊กเลือกว่าจะเอาหรือไม่เอา




การสร้างช่องติ๊ก {QCheckBox}

การสร้าง QCheckBox นั้นคล้ายกับ QLabel คือจะมีข้อความตัวหนังสืออยู่ด้วย แค่จะมีช่องสี่เหลี่ยมให้ติ๊กโผล่ขึ้นมาทางซ้ายให้ติ๊กได้

ลองสร้างช่องติ๊กเปล่าๆขึ้นมาดูเป็นตัวอย่าง
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QCheckBox

qAp = QApplication(sys.argv)
natang = QWidget()
chongtick = QCheckBox('เอา',natang) # สร้างช่องติ๊ก
chongtick.move(20,20)
natang.show()
qAp.exec_()

ก็จะได้ช่องแบบนี้ที่กดติ๊กได้






การตั้งสถานะติ๊ก {.setChecked}

ปกติช่องที่เริ่มสร้างขึ้นมาจะเป็นสี่เหลี่ยมเปล่าที่ไม่ได้ติ๊ก ถ้าจะตั้งสถานะติ๊กสามารถทำได้โดยเมธอด .setChecked โดยถ้าใส่ True จะทำให้อยู่ในสถานะถูกติ๊ก ถ้า False ก็จะไม่ถูกติ๊ก

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

qAp = QApplication(sys.argv)
natang = QWidget()

chongtick1 = QCheckBox('ooo',natang)
chongtick1.setChecked(True) # ตั้งให้ติ๊ก
chongtick1.move(10,10)

chongtick2 = QCheckBox('oxo',natang)
chongtick2.setChecked(False) # ตั้งให้ไม่ติ๊ก
chongtick2.move(10,40)

natang.show()
qAp.exec_()

จะได้กล่องบนถูกติ๊กอยู่ และกล่องล่างไม่ถูกติ๊กอยู่



ลองดูอีกตัวอย่าง เช่นสร้างปุ่มที่กดแล้วทำให้เกิดการเลือกติ๊กทั้งหมดได้
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QCheckBox,QPushButton

qAp = QApplication(sys.argv)
natang = QWidget()

chongtick1 = QCheckBox('soba',natang)
chongtick1.move(10,10)

chongtick2 = QCheckBox('ramen',natang)
chongtick2.move(70,10)

chongtick3 = QCheckBox('udon',natang)
chongtick3.move(130,10)

def tickmot():
    chongtick1.setChecked(True)
    chongtick2.setChecked(True)
    chongtick3.setChecked(True)

pumkot = QPushButton('zenbu',natang)
pumkot.move(10,40)
pumkot.clicked.connect(tickmot)

natang.show()
qAp.exec_()

พอกดปุ่มด้านล่าง ช่องติ๊กทั้ง ๓​ ด้านบนก็จะถูกติ๊กทั้งหมด






การเปลี่ยนสลับสถานะติ๊ก {.toggle}

ในขณะที่ถ้าใช้เมธอด .setChecked จะเป็นการกำหนดชัดว่าให้เปลี่ยนสถานะเป็นติ๊กหรือไม่ติ๊ก แต่หากต้องการให้สลับจากติ๊กเป็นไม่ติ๊ก สลับจากไม่ติ๊กเป็นติ๊ก เหมือนเวลาที่เราไปกดช่องติ๊กโดยทั่วไป แบบนี้ให้ใช้เมธอด .toggle

ตัวอย่างเช่น
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QCheckBox,QPushButton

qAp = QApplication(sys.argv)
natang = QWidget()

chongtick1 = QCheckBox('ก',natang)
chongtick1.move(10,10)

chongtick2 = QCheckBox('ข',natang)
chongtick2.setChecked(True)
chongtick2.move(70,10)

chongtick3 = QCheckBox('ค',natang)
chongtick3.move(130,10)

def tickmot():
    chongtick1.toggle()
    chongtick2.toggle()
    chongtick3.toggle()

pumkot = QPushButton('@@@',natang)
pumkot.move(50,40)
pumkot.clicked.connect(tickmot)

natang.show()
qAp.exec_()

จะได้หน้าต่างที่มีช่องติ๊ก ๓​ ช่องแบบนี้ ลองกดปุ่มด้านล่างก็จะเป็นการเปลี่ยนสถานะของทั้ง ๓ ปุ่มไปพร้อมกัน





การทำคำสั่งเมื่อถูกติ๊ก {.toggled}

หากมีฟังก์ชันที่ต้องการให้ทำงานเมื่อช่องติ๊กถูกติ๊กก็ให้ใช้เมธอด .toggled

อนึ่ง .toggled กับ .toggle เขียนคล้ายกัน แค่เพิ่มตัว d เข้ามา ระวังสับสน

ตัวอย่าง ลองให้ขึ้น !!! เมื่อมีการติ๊ก
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QCheckBox

qAp = QApplication(sys.argv)
natang = QWidget()

chongtick = QCheckBox('!!!!',natang)
chongtick.move(10,10)
chongtick.toggled.connect(lambda: print('!!!'))

natang.show()
qAp.exec_()





การดูว่าช่องนั้นถูกติ๊กอยู่หรือไม่ {.isChecked}

สามารถใช้เมธอด isChecked เมื่อต้องการจะตรวจดูสถานะว่าช่องติ๊กนั้นถูกติ๊กอยู่หรือไม่

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

qAp = QApplication(sys.argv)
natang = QWidget()

def tickyumai():
    if(chongtick.isChecked()):
        print('ติ๊กอยู่')
    else:
        print('ไม่ติ๊กแล้ว')

chongtick = QCheckBox('ติ๊กต๊อก',natang)
chonttick.setStyleSheet('background-color: #9fe; font-family: Tahoma')
chongtick.move(10,10)
chongtick.toggled.connect(tickyumai)

natang.show()
qAp.exec_()






การตั้งให้แก้ติ๊กไม่ได้ {.setCheckable}

หากต้องการให้ช่องนั้นติ๊กไม่ได้ก็อาจใช้เมธอด .setCheckable ตั้งเป็น False

เช่นลองสร้างช่องติ๊กขึ้นมา ๒ ช่อง ให้ช่องซ้ายแก้ติ๊กได้เมื่อช่องขวาติ๊กอยู่เท่านั้น
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QCheckBox

qAp = QApplication(sys.argv)
natang = QWidget()

chongtick1 = QCheckBox('T_T',natang)
chongtick1.move(10,10)
chongtick1.setCheckable(False)

def tickla():
    chongtick1.setCheckable(chongtick2.isChecked())

chongtick2 = QCheckBox('^_^',natang)
chongtick2.move(80,10)
chongtick2.toggled.connect(tickla)

natang.show()
qAp.exec_()

ก็จะได้ช่องแบบนี้ ลองติ๊กช่องซ้ายโดยยังไม่ได้ติ๊กช่องขวา จะพบว่าไม่เกิดอะไรขึ้น



นอกจากนี้ยังอาจใช้เมธอด .setEnabled แทนก็ได้เพื่อให้ทำงานไม่ได้ แต่เมธอดนี้จะทำให้กล่องข้อความเปลี่ยนสีไปให้เห็นแยกได้ชัดว่าอยู่ในสถานะที่ใช้งานไม่ได้ ดังนั้นถ้าต้องการให้เห็นสถานะของกล่องชัดเจนก็ใช้ .setEnabled แทน .setCheckable น่าจะดีกว่า




สรุปท้ายบท

ในบทนี้ได้เขียนถึงการสร้างและใช้งานช่องติ๊กไปแล้ว ในบทต่อไปจะถูกถึง widget อีกตัวที่คล้ายๆกัน นั่นคือ QRadioButton



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





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

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

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

หมวดหมู่

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

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

目录

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

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

按类别分日志



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

  查看日志

  推荐日志

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