This code demonstrates three different ways to run background tasks in a PyQt5 GUI application in Python.

Subclassing QThread:
AThread class is a subclass of the QThread class and overrides the run method. The run method contains the code that will run in the background. In this case, the code contains a while loop that runs 5 times and each time prints "A Increasing" and increments the counter by 1.

Subclassing QObject and using moveToThread:
SomeObject is a subclass of the QObject class and contains the long_running method. The long_running method is similar to the run method in the AThread class, but instead of subclassing QThread, it uses the moveToThread method to run the code in a separate thread. A signal finished is also defined that is emitted when the long_running method has completed execution.

Using a QRunnable:
Runnable is a subclass of the QRunnable class and overrides the run method. This method contains the code that will run in the background. Since QRunnable is not a subclass of QObject, it does not provide signals and slots and therefore doesn't emit signals.

In the main function, each of these methods is demonstrated by creating an instance of the respective class, setting up the connections and starting the thread. The main function then runs the GUI event loop using sys.exit(app.exec_()). This line starts the GUI event loop and waits until the signal finished is emitted and then exits the event loop, which in turn terminates the program.
โค้ดนี้สาธิตวิธีการรันงานเบื้องหลังในแอปพลิเคชัน PyQt5 GUI ใน Python ที่แตกต่างกันสามวิธี คลาสย่อย QThread: คลาส AThread เป็นคลาสย่อยของคลาส QThread และแทนที่วิธีการรัน วิธีการเรียกใช้ประกอบด้วยโค้ดที่จะทำงานในเบื้องหลัง ในกรณีนี้ โค้ดประกอบด้วยการวนซ้ำ while ที่รัน 5 ครั้ง และแต่ละครั้งจะพิมพ์ "A Increasing" และเพิ่มตัวนับ 1 คลาสย่อย QObject และการใช้ moveToThread: SomeObject เป็นคลาสย่อยของคลาส QObject และมีเมธอด long_running วิธีการ long_running นั้นคล้ายคลึงกับวิธีการ run ในคลาส AThread แต่แทนที่จะใช้คลาสย่อย QThread จะใช้เมธอด moveToThread เพื่อรันโค้ดในเธรดที่แยกจากกัน สัญญาณที่เสร็จสิ้นแล้วยังถูกกำหนดไว้ซึ่งจะถูกปล่อยออกมาเมื่อเมธอด long_running ดำเนินการเสร็จสิ้นแล้ว การใช้ QRunnable: Runnable เป็นคลาสย่อยของคลาส QRunnable และแทนที่วิธีการเรียกใช้ วิธีนี้มีโค้ดที่จะทำงานในเบื้องหลัง เนื่องจาก QRunnable ไม่ใช่คลาสย่อยของ QObject จึงไม่ได้จัดเตรียมสัญญาณและสล็อต จึงไม่ส่งสัญญาณ ในฟังก์ชันหลัก แต่ละวิธีการเหล่านี้จะแสดงโดยการสร้างอินสแตนซ์ของคลาสที่เกี่ยวข้อง การตั้งค่าการเชื่อมต่อ และการเริ่มต้นเธรด จากนั้นฟังก์ชันหลักจะรันลูปเหตุการณ์ GUI โดยใช้ sys.exit(app.exec_()) บรรทัดนี้เริ่มต้นลูปเหตุการณ์ GUI และรอจนกระทั่งสัญญาณเสร็จสิ้นแล้วจึงออกจากลูปเหตุการณ์ ซึ่งจะยุติโปรแกรมตามลำดับ
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence