簡體   English   中英

PyQt4中的多線程python GUI的正確實現是什么

[英]What is the correct implementation of a mulithreaded python GUI in PyQt4

我正在努力將舊的Java GUI修改為python,並決定嘗試在PyQt4中創建並實現此功能。

原始程序連接到外部服務器,並使用服務器設置的數據更新各種圖形。 這些圖是從主GUI打開的,並且彼此獨立運行和更新。

我設法設置了類似的東西,可以打開一個主GUI窗口,並連接到外部服務器。 當我從服務器獲取新數據時,我遇到的問題是更新一個圖形(我以為我將從一個圖形開始,然后從那里開始增加)。

由於我缺乏理解,或者沒有找到python文檔,因此我在通過PyQt建立客戶端到服務器的連接或在GUI中建立線程時,已經實現了各種解決方法。 我連接到服務器並通過扭曲的客戶端讀取數據。 該客戶端在從python線程模塊實現的單獨線程上運行。 至少從我的判斷來看,這是可行的。

我可以從主窗口中使用最新更新的數據打開圖形,但似乎無法從扭曲的客戶端線程更新它們。 我收到如下錯誤:

QObject :: setParent:無法設置父級,新的父級位於不同的線程中或發生異常。RuntimeError:主線程不在主循環中

從我的研究中我了解到,對於PyQt,必須從主線程更新Windows。 我不確定該怎么做。 我當前的實現中有一個主線程承載着主要的初始窗口,並且我不確定在收到新數據時如何觸發它來更新子窗口。

有什么想法或鏈接可以給我一個想法,如何實現這一目標,或者什么可以是更好的GUI框架或設置?

編輯:我的代碼的當前設置將創建用於設置客戶端連接並處理服務器消息的線程,該線程當前設置為Daemon線程。 因為,它沒有退出條件,除非與服務器的連接丟失。 Twisted客戶端不允許用戶返回數據,但是由於我需要更新圖形的數據存儲在自變量內部,因此它們會在每個新數據包期間進行更新。 QTread的所有示例似乎都有退出條件,我如何在沒有條件的情況下使它工作? 或如何設置客戶端以具有退出語句,然后重新連接以獲取下一條消息?

代替python線程,使用QThread按照文檔中的建議創建自己的worker類。 (帶有WorkerThread的第二個示例)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM