Bagaimanakah saya boleh menyampaikan data dengan selamat antara tetingkap utama dan benang dalam PyQt?

Linda Hamilton
Lepaskan: 2024-11-01 12:50:15
asal
393 orang telah melayarinya

How can I safely communicate data between the main window and a thread in PyQt?

Berkomunikasi Data Antara Tetingkap Utama dan Benang dalam PyQt

Dalam aplikasi PyQt, senario biasa melibatkan perkongsian data antara tetingkap utama dan benang sambil mengekalkan keselamatan benang. Berikut ialah pendekatan yang disyorkan:

Isyarat dan Slot:

  • Isytihar isyarat Qt tersuai dalam kelas benang, cth., bip().
  • Sambungkan isyarat dalam tetingkap utama ke slot yang mengemas kini widget yang berkaitan, cth., kemas kini().

Contoh:

<code class="python">class Worker(QtCore.QThread):
    beep = QtCore.pyqtSignal(int)

    def __init__(self, sleep_time):
        super(Worker, self).__init__()
        self.sleep_time = sleep_time

    def run(self):
        i = 0
        while True:
            i += 1
            self.beep.emit(i)
            time.sleep(self.sleep_time)

class MainWindow(QtGui.QWidget):
    def __init__(self):
        # ...
        self.worker = Worker(1)  # Initial sleep time
        self.worker.beep.connect(self.update)
        self.worker.start()

    def update(self, number):
        # Update widget with number
        self.output.display(number)</code>
Salin selepas log masuk

Kaveat:

  • Widget Qt tidak selamat untuk benang dan hanya boleh diakses dari urutan utama.
  • Pembolehubah global mungkin tidak berfungsi seperti yang diharapkan apabila diakses daripada berbilang rangkaian.

Pendekatan Lain:

  • Melalui Rujukan Tetingkap Hos: Berisiko kerana ia bergantung pada pertalian rangkaian QObject dan boleh membawa kepada keadaan perlumbaan.
  • Menyimpan Salinan Disegerakkan: Memerlukan mengekalkan konsistensi antara tetingkap utama dan benang, yang boleh menjadi rumit.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menyampaikan data dengan selamat antara tetingkap utama dan benang dalam PyQt?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan