gpt4 book ai didi

python - 将 Pyqt GUI 主应用程序作为单独的非阻塞进程运行

转载 作者:太空宇宙 更新时间:2023-11-03 10:54:12 25 4
gpt4 key购买 nike

我正在寻找从 python 或 ipython 控制台运行 pyqt GUI 的可能性。

基本上,主要思想是像使用 matplotlib 绘图或图像一样使用 Pyqt GUI,从控制台向 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 窗口一样?

最佳答案

线程在这里无关紧要。 PyQt 已经被设计为在普通的 python 交互式 session 中工作,所以不需要做任何特殊的事情来让它工作。

我建议您删除 mythreadshow 函数并将它们替换为如下内容:

if QtWidgets.QApplication.instance() is None:
app = QtWidgets.QApplication(sys.argv)

然后你可以像这样使用你的gui模块:

>>> from mygui import MainWindow
>>> win = MainWindow()
>>> win.show()
>>> win.callback_pb_load()

永远不要调用 app.exec_()。 PyQt 将自行处理事件循环。

关于python - 将 Pyqt GUI 主应用程序作为单独的非阻塞进程运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44527603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com