ฉันค่อนข้างใหม่กับเธรด/GUI และสิ่งที่ฉันพยายามสร้างคือกล่องโต้ตอบที่ขอให้ผู้ใช้สแกนบาร์โค้ด (ผ่านพอร์ตอนุกรม) จากนั้นจะเติมข้อมูลตามบาร์โค้ดนั้น
การสแกนและการเติมชิ้นส่วนนั้นไม่มีปัญหา ปัญหาของฉันคือทันทีที่ฉันเปิดกล่องโต้ตอบนี้ ฉันเริ่มอ่านจากพอร์ตอนุกรมเพื่อดูว่ามีอะไรถูกสแกนหรือไม่ สิ่งนี้จะทำให้ GUI ค้างและไม่อนุญาตให้ผู้ใช้ยกเลิก หลังจากค้นคว้ามาสักพักแล้ว ดูเหมือนว่าฉันอยากจะทำเกลียวบ้าง แต่ก็คิดไม่ออก
นี่คือสิ่งที่ฉันมี:
...
self.edit_location = EditLocation(self)
self.edit_location.show()
self.edit_location.wait_for_scan()
class EditLocation(QDialog):
def __init__(self, parent=None):
QDialog.__init__(self, parent)
self.ui = ui_edit_location.Ui_EditLocation()
self.ui.setupUi(self)
self.parent = parent
def wait_for_scan(self):
thread = ScanThread()
thread.start()
def receivedBarcode(self, barcode):
print "recieved", barcode
class ScanThread(QThread):
def __init__(self):
QThread.__init__(self)
def __del__(self):
self.wait()
def run(self):
barcode = scan_barcode()
self.emit(SIGNAL('receivedBarcode'), barcode)
และในไฟล์สแกนของฉัน... (ใช้ pyBarcode)
s = serial.Serial(scanner_port)
def scan_barcode():
return s.readline()
GUI ยังคงค้างจนกว่าจะสแกนบาร์โค้ด ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมมาก!
thread
ฉันไม่แน่ใจว่าทำไมคุณต้องทำสิ่งนี้อย่างแน่นอน แต่ฉันคิดว่าเนื่องจาก python พยายามรวบรวมตัวแปรthread
แบบขยะ มันจึงติดอยู่กับการเรียกself.wait()
ในฟังก์ชัน__del__
- person hackyday   schedule 12.06.2014QThread.__init__(self, parent)
และนั่นก็แก้ไขได้ ขอขอบคุณสำหรับความช่วยเหลือ! - person jongusmoe   schedule 12.06.2014