我正在尋找從python或ipython控制檯運行pyqt GUI的可能性。將Pyqt GUI主應用作爲單獨的非阻塞進程運行
基本上主要的想法是使用Pyqt GUI,就像使用matplotlib圖或圖像一樣,您可以從控制檯向GUI傳遞參數以查看數據,繼續在控制檯中執行操作,也許會打開另一個窗口,關閉第一個,在控制檯上做更多的事情等等。
我已經使用線程(Run pyQT GUI main app in seperate Thread)實現了這個解決方案,並且正如在評論中預測的那樣,它在幾個週期後崩潰了python控制檯。
這裏是導頻碼:
import sys
from PyQt5 import QtWidgets, QtGui, QtCore
class MainWindow(QtWidgets.QWidget):
def __init__(self):
# call super class constructor
super(MainWindow, self).__init__()
# build the objects one by one
layout = QtWidgets.QVBoxLayout(self)
self.pb_load = QtWidgets.QPushButton('Load')
self.pb_clear= QtWidgets.QPushButton('Clear')
self.edit = QtWidgets.QTextEdit()
layout.addWidget(self.edit)
layout.addWidget(self.pb_load)
layout.addWidget(self.pb_clear)
# connect the callbacks to the push-buttons
self.pb_load.clicked.connect(self.callback_pb_load)
self.pb_clear.clicked.connect(self.callback_pb_clear)
def callback_pb_load(self):
self.edit.append('hello world')
def callback_pb_clear(self):
self.edit.clear()
def mythread():
app = QtWidgets.QApplication(sys.argv)
win = MainWindow()
win.show()
app.exec_()
def show():
import threading
t = threading.Thread(target = mythread)
t.daemon = True
t.start()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
運行該文件將正常運行的GUI。導入它並運行show()會嘗試以非阻塞的方式從控制檯運行GUI。
有沒有辦法產生一個線程或進程嵌入PyQt應用程序,將行爲像一個matplotlib窗口會?
請注意,如果您想在IPython中執行此操作,則必須在啓動IPython後使用'ipython --gui = qt5'或鍵入'%gui qt5'來啓動它。 – titusjan
當然,我認爲我的主要問題一直在嘗試使用ipython來執行此操作,而不使用%gui qt5修飾符。遵循上面的配方工作正常。這已解決,謝謝。 – oliche