Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh menyampaikan data dengan selamat antara tetingkap utama dan benang dalam PyQt?

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

Linda Hamilton
Linda Hamiltonasal
2024-11-01 12:50:15399semak imbas

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>

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!

Kenyataan:
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