Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Berkongsi Data Antara Tetingkap Utama dan Benang dalam PyQt: Rujukan Terus lwn. Isyarat dan Slot?

Bagaimana untuk Berkongsi Data Antara Tetingkap Utama dan Benang dalam PyQt: Rujukan Terus lwn. Isyarat dan Slot?

Linda Hamilton
Linda Hamiltonasal
2024-10-27 00:40:30868semak imbas

How to Share Data Between the Main Window and Threads in PyQt: Direct Reference vs. Signals and Slots?

Berkongsi Data Antara Tetingkap Utama dan Benang dalam PyQt

Aplikasi berbilang benang selalunya perlu berkongsi data antara utas tetingkap utama dan utas pekerja. Untuk memastikan keselamatan benang dan komunikasi yang betul, PyQt menawarkan beberapa pendekatan praktikal.

Pilihan 1: Rujukan Terus ke Tetingkap Utama

Dalam pendekatan ini, rujukan kepada yang utama tetingkap dihantar ke benang. Urutan kemudiannya boleh terus mengakses data dalam tetingkap utama, seperti nilai kotak spin.

<code class="python">class MainWindow(QtGui.QWidget):
    def __init__(self):
        # ...
        self.worker = Worker(self)
        # ...

class Worker(QtCore.QThread):
    def __init__(self, host_window):
        super(Worker, self).__init__()
        self.host = host_window
        # ...</code>

Pilihan 2: Isyarat dan Slot

Penggunaan PyQt isyarat dan slot untuk berkomunikasi antara objek. Dalam pendekatan ini, benang pekerja memancarkan isyarat apabila data berubah dan fungsi slot tetingkap utama mengendalikan kemas kini.

<code class="python">class MainWindow(QtGui.QWidget):
    def __init__(self):
        # ...
        self.worker = Worker()
        self.worker.beep.connect(self.update)
        # ...

class Worker(QtCore.QThread):
    beep = QtCore.pyqtSignal(int)

    def __init__(self):
        super(Worker, self).__init__()
        # ...</code>

Pilihan Mana Yang Perlu Digunakan?

pilihan bergantung pada keperluan urutan dan tahap kawalan yang diperlukan.

  • Pilihan 1 menawarkan akses terus kepada data tetingkap utama tetapi mungkin tidak berskala untuk perkongsian data yang lebih kompleks.
  • Pilihan 2 memastikan keselamatan benang dan menyokong corak komunikasi yang lebih fleksibel.

Pertimbangan Keselamatan Benang

Widget ialah tidak selamat untuk benang. Oleh itu, adalah penting untuk menggunakan isyarat dan slot untuk mengendalikan komunikasi antara benang dan tetingkap utama. Manipulasi langsung widget daripada berbilang urutan boleh membawa kepada tingkah laku yang tidak dijangka.

Atas ialah kandungan terperinci Bagaimana untuk Berkongsi Data Antara Tetingkap Utama dan Benang dalam PyQt: Rujukan Terus lwn. Isyarat dan Slot?. 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