我試圖編寫一個應用程序時遇到了一些問題,所以我首先給出一個關於所有交互的「大圖片」描述:Qt設計器實時顯示python腳本的輸出
我有一個簡單的用Qt Designer編寫的用戶界面。這將啓動一系列對某些文件進行不同類型操作的Python腳本。所有通過打印操作都會通知用戶,但是這發生在命令行中。到目前爲止,所有的工作都是按照需要/意圖進行的。
重要提示:有時需要用戶輸入:值或只是「按任意鍵」類型的東西。再次,按照打算在cmd行中工作。
現在我想要做的就是將所有從cmd行中的python腳本出來的信息添加到Qt Designer UI中。
什麼工作:我能夠獲得蟒蛇執行的輸出,並在文本編輯對象
什麼不工作,以顯示它 : 的UI是在執行結束時只更新在腳本執行正在進行時沒有響應
我希望將ui更新爲逐行,而不是批量處理。
我如何做到這一點:
class my_ui(QtWidgets.QMainWindow):
...
def button_pressed
self.__process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
while self.__process.poll() is None:
line = self.__process.stdout.readline()
print(line)
def main(self):
...
self.console_output_to_ui()
def write(self, text):
self.ui.textEdit.append(text)
def console_output_to_ui(self):
sys.stdout = self
現在我搶輸出看起來是這樣的:
....
b"evaluate_condition(): '4'\r\n"
# time delay 1s
b"evaluate_condition(): '5'\r\n"
# time delay 1s
b"evaluate_condition(): '6'\r\n"
....
忽略對於現在的壞格式,我想
將這個日誌逐行顯示,就像在Qt Designer UI中的cmd/debug在python中一樣,不會阻塞/鎖定UI。
找到一種方法來將參數/輸入值傳遞給正在執行的進程。我想我可能還需要定義stdin,但是如何將它從QtDesigner傳遞到進程是我無法弄清楚的。
謝謝!