5 ธันวาคม 2558

Published ธันวาคม 05, 2558 by with 0 comment

GUI โค้ดเดียวทำงานได้ทั้ง PyQt4 และ PySide

สวัสดีผู้อ่านทุกท่านครับ ในบทความที่ผ่าน ๆ มา ผมได้นำเสนอวิธีการเขียนโปรแกรม GUI ด้วย PySide บนภาษาไพทอนมาแล้ว นอกจาก PySide แล้วยังมี PyQt4 ที่เป็นที่นิยมกันอยู่ แต่หากผู้อ่านต้องการนำโปรแกรมที่เขียนด้วย PyQt4 ไปใช้ในเชิงการค้า ต้องเสียค่าไลน์เซ็นให้กับนักพัฒนาโมดูล  PyQt แต่เนื่องจากทั้ง  PyQt4 และ PySide มี API ที่เกือบจะเหมือนกัน (เพราะใช้ Qt4 ทั้งคู่) บทความนี้ผมขอแนะนำวิธีการเขียนโค้ด GUI โค้ดเดียวโดยทำงานได้ทั้ง PyQt4 และ PySide กันครับ


อ่านบทความชุด สร้าง GUI ด้วย PySide ใน Python
แนะนำ
แนะนำให้ใช้โมดูล QtPy แทนบทความนี้ดีกว่าครับ 
อ่านเพิ่มเติมได้ที่ GUI ด้วย Qt ในภาษาไพทอน โค้ดเดียวใช้งานได้ทั้ง PyQt4 , PyQt5 และ PySide
4/1/2559

ผมได้ไปเจอโค้ดที่ช่วยเชื่อม API ระหว่าง PyQt4 และ PySide ที่สามารถให้สามารถนำโค้ดของ PyQt4 มารันบน PySide หรือ  PySide ไปรันบน PyQt4 ได้ง่าย ๆ โดยเปลี่ยนแค่ import เท่านั้น (ผมลองแล้วใช้งานได้เฉพาะ API ใน QtCore, QtGui เท่านั้นครับ)

ทำการก็อปโค้ดด้านล่างมา แล้วบันทึกไฟล์เป็นไฟล์ ชื่อ QtWrapper.py ไว้ในโฟลเดอร์เดียวกันกับไฟล์ GUI ที่ต้องการ

การนำไปใช้งาน


เปิด python ในคอมมานด์ไลน์แล้วชี้โฟลดอร์เข้าไปในโฟลเดอร์ที่มีไฟล์ QtWrapper.py อยู่
โค้ดตัวอย่างจากบทความ สร้าง GUI ด้วย PySide Workshop 2 : ตัวอย่างโปรแกรม Digital Clock

from PySide import QtCore, QtGui
class DigitalClock(QtGui.QLCDNumber):
 def __init__(self, parent=None):
  super(DigitalClock, self).__init__(parent)
  self.setSegmentStyle(QtGui.QLCDNumber.Filled)
  timer = QtCore.QTimer(self)
  timer.timeout.connect(self.showTime)
  timer.start(1000)
  self.showTime()
  self.setWindowTitle("โปรแกรมตัวอย่าง Digital Clock") #ชื่อหัวโปรแกรม
  self.resize(350,150) #กำหนดขนาด
 def showTime(self):
  time = QtCore.QTime.currentTime()
  text = time.toString('hh:mm')
  if (time.second() % 3) == 0:
   text = text[:2] + ' ' + text[3:]
  self.display(text)

if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
clock = DigitalClock()
clock.show()
sys.exit(app.exec_())

เมื่อนำมาแก้ไขโดยเปลี่ยนเป็น QtWrapper

from QtWrapper import QtCore, QtGui
class DigitalClock(QtGui.QLCDNumber):
 def __init__(self, parent=None):
  super(DigitalClock, self).__init__(parent)
  self.setSegmentStyle(QtGui.QLCDNumber.Filled)
  timer = QtCore.QTimer(self)
  timer.timeout.connect(self.showTime)
  timer.start(1000)
  self.showTime()
  self.setWindowTitle("โปรแกรมตัวอย่าง Digital Clock") #ชื่อหัวโปรแกรม
  self.resize(350,150) #กำหนดขนาด
 def showTime(self):
  time = QtCore.QTime.currentTime()
  text = time.toString('hh:mm')
  if (time.second() % 3) == 0:
   text = text[:2] + ' ' + text[3:]
  self.display(text)

if __name__ == '__main__':
 import sys
 app = QtGui.QApplication(sys.argv)
 clock = DigitalClock()
 clock.show()
 sys.exit(app.exec_())


ผลลัพธ์

digital_clock_pyside

ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)