Threading dan PyQT

Saya cukup baru dalam threading/GUI dan yang saya coba buat adalah dialog yang meminta pengguna untuk memindai kode batang (melalui port serial), dan kemudian mengisi data berdasarkan kode batang tersebut.

Bagian pemindaian dan pengisian tidak ada masalah. Masalah saya adalah segera setelah saya membuka dialog ini, saya mulai membaca dari port serial untuk melihat apakah ada yang telah dipindai. Ini membekukan GUI dan tidak memungkinkan pengguna untuk membatalkan. Jadi setelah sedikit riset, sepertinya saya ingin melakukan threading, tetapi saya tidak dapat menemukannya.

Inilah yang saya punya:

    ...
    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)

dan di file pemindaian saya... (menggunakan pyBarcode)

s = serial.Serial(scanner_port)   
def scan_barcode():
    return s.readline()

GUI masih macet hingga kode batang dipindai. Bantuan apa pun akan sangat dihargai!


person jongusmoe    schedule 11.06.2014    source sumber
comment
Simpan referensi ke thread. Saya tidak yakin mengapa Anda perlu melakukan ini dengan tepat, tetapi saya berspekulasi bahwa ketika python mencoba mengumpulkan sampah, variabel thread ia macet pada panggilan self.wait() di fungsi __del__.   -  person hackyday    schedule 12.06.2014
comment
Terima kasih! Saya melakukan itu, dan saya juga meneruskan 'induk' ke QThread dan melakukan QThread.__init__(self, parent) dan memperbaikinya. Hargai bantuannya!   -  person jongusmoe    schedule 12.06.2014