- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我为我的应用程序设计了一个 GUI,单击按钮后,我连接了一个自定义函数,其中我调用 bash 命令来同时运行 2 个 Python 脚本。这两个脚本都是 Qt 应用程序。我有一个名为“开始”的按钮来运行 bash 命令。但是,一旦我单击该按钮,两个应用程序都会启动,但我的 GUI 卡住了。另外,我有一个“停止”按钮来停止这些应用程序,但 GUI 卡住了,我无法使用 GUI 执行任何操作。我做错了什么?
我尝试了同时运行 2 个脚本的各种选项,但命令 python3 script1.py & python3 script2.py &
对我来说效果很好。还有其他方法吗? os.system()
或 subprocess.call()
对我来说不起作用。有什么有效的方法吗?
这是我的 UI 的主要代码。
class MainApp(QtWidgets.QMainWindow, mainui.Ui_MainWindow):
def __init__(self, parent=None):
super(MainApp, self).__init__(parent)
self.setupUi(self)
self.exitapp()
self.startApp()
def multipleopen(self):
self.output = subprocess.check_output(['bash', '-c',
"python3 guiGO.py & python3 liveSpectogram.py &"])
def startApp(self):
self.start.clicked.connect(self.multipleopen)
def exitapp(self):
self.exit.clicked.connect(QtCore.QCoreApplication.instance().quit)
我希望在单击“开始”按钮时启动这两个应用程序,并通过单击“停止”按钮停止它。但是单击“开始”按钮后,GUI 卡住,除了关闭正在运行的应用程序并关闭 GUI 窗口之外,我无法执行任何操作
GUI 变得无响应
我必须强制退出 GUI
我必须使用停止按钮手动停止脚本
最佳答案
函数 subprocess.check_output()
是阻塞的,因此它将通过卡住您的应用程序来阻止 GUI 的事件循环完成其工作,而您应该使用 QProcess
:
class MainApp(QtWidgets.QMainWindow, mainui.Ui_MainWindow):
def __init__(self, parent=None):
super(MainApp, self).__init__(parent)
self.setupUi(self)
self._process = QtCore.QProcess(self)
self._process.readyReadStandardOutput.connect(self.on_readyReadStandardOutput)
self._process.setProcessChannelMode(QtCore.QProcess.ForwardedChannels)
self._process.setProgram('bash')
self._process.setArguments(['-c', 'python3 guiGO.py & python3 liveSpectogram.py &'])
self.exitapp()
self.startApp()
# read prints
def on_readyReadStandardOutput(self):
self.output = self._process.readAllStandardOutput()
print(self.output)
def startApp(self):
self.start.clicked.connect(self._process.start)
def exitapp(self):
self.exit.clicked.connect(self.close)
更新:
如果你想终止 python 脚本,你必须通过 bash 使用 pkill 命令来完成,因为这是启动它们的脚本。您应该在代码的哪一部分调用 pkill ?可能的部分是 closeEvent 方法。
from PyQt5 import QtCore, QtWidgets
class MainApp(QtWidgets.QMainWindow): #, mainui.Ui_MainWindow):
def __init__(self, parent=None):
super(MainApp, self).__init__(parent)
self.setupUi(self)
self._scripts = ("guiGO.py", "liveSpectogram.py")
self._processes = []
for script in self._scripts:
process = QtCore.QProcess(self)
process.readyReadStandardOutput.connect(self.on_readyReadStandardOutput)
process.setProcessChannelMode(QtCore.QProcess.ForwardedChannels)
process.setProgram('bash')
process.setArguments(['-c', 'python3 {}'.format(script)])
self._processes.append(process)
self.exitapp()
self.startApp()
# read prints
def on_readyReadStandardOutput(self):
self.output = self.sender().readAllStandardOutput()
print(self.output)
def startApp(self):
for process in self._processes:
self.start.clicked.connect(process.start)
def exitapp(self):
self.exit.clicked.connect(self.close)
def closeEvent(self, event):
for script in self._scripts:
QtCore.QProcess.startDetached("bash", ["-c", "pkill -f {}".format(script)])
super(MainApp, self).closeEvent(event)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainApp()
w.show()
sys.exit(app.exec_())
关于python - "GUI becomes unresponsive after clicking the button",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55418153/
大家好,我正在执行一个不同类型的可用移动网站元素,其中包括在移动设备上显示的响应式网站和标准桌面网站。现在我已经制作了基于响应式骨架的网站,我需要制作一个“无响应”的 HTML 网站。 与其经历制作
嘿,每当我运行我的脚本时,它似乎都会收到此警告消息。 当我在脚本中调用 jquery 函数时会发生这种情况。我已包含下面的脚本并在我调用该函数的位置放置 - 警告:无响应脚本 - 注释。我真的不知道为
我正在使用 C# .Net Windows 应用程序。在这里,我使用了来自 bitbucket 的 xulrunner 22.0 + Geckofx 22.0。 我已经使用 Geckofx 浏览器在我
这是我在这里发表的第一篇文章,我在表达问题时遇到了问题,所以请耐心等待,因为我已经在这个问题上研究了几个小时。 我和我的 friend 想到了一个有趣的小函数,它应该在一定数量的试验中使用随机数函数来
这个问题已经有答案了: Asynchronous and synchronous (2 个回答) 已关闭10 年前。 我正在使用像这样的 jQuery ajax 代码: $.each(url_id,
我有一个 HTML 文档,它是响应式的。 我想让它没有反应。我怎样才能以最有效、最快的方式做到这一点? 我已经尝试将 min-width 赋予 html 和 body;然而,一些对象仍然响应窗口大小。
我有一个 MKMapView,上面有 2 个按钮:放大和缩小。 我注意到,当我使用它们时,在动画完成之前我无法再捏合 map 进行缩放。 我的按钮连接到 setRegion 的范围比现在更小或更大。
请原谅我的无知,我对使用 XULRunner 还比较陌生。 我正在尝试调试 XULRunner 应用程序的问题,但遇到了困难。我们正在使用该应用程序加载某些网站并检索布局信息。抓取完成后,我们关闭页面
在 D3 中使用闪烁功能时,一段时间后我收到一条错误消息 .transition() .duration(250)
我为我的应用程序设计了一个 GUI,单击按钮后,我连接了一个自定义函数,其中我调用 bash 命令来同时运行 2 个 Python 脚本。这两个脚本都是 Qt 应用程序。我有一个名为“开始”的按钮来运
我为 Movember 创建了一个小的 javascript 网页,让用户可以将我的 mustache “剃”成 mustache ,或者完全剃掉。 我通过用 div 网格覆盖剃光图片来完成此操作,其
我正在开发一个从噪声算法生成模式的 JS 项目。我正在生成多个 Octave 音阶的噪音以获得我想要的结果,最终大约有 7,000,000 个值。正如您想象的那样,我收到了一个无响应的脚本错误。 有没
我有一个通过 Derelict 3 访问的 SDL2 窗口化窗口。 它应该是黑白频闪的(不是因为我讨厌癫痫患者),而且它成功地做到了这一点。然而,在一段时间后,Ubuntu 13.10 将窗口标记为“
我有一个可以转换多种文件格式的小应用程序,它有一个主窗口窗体,其中包含几个文本框、按钮等。我有另一个“文档”类来处理所有实际的转换工作,我的窗体基本上是迭代的通过所有文件,并调用适当的 Documen
我有一个 javascript 长执行过程(以及拥有它的原因)。如何避免 在 javascript 客户端计算机上出现消息?我读到一些关于--disable-hang-monitor,但它是一个命令行
我开发了一个 PHP 系统,该系统使用 Javascript 和 ExtJS 库,该库提供 Javascript 中的图形组件。所以我有一个网格,每 3 分钟通过 AJAX 调用刷新一次,该调用会重新
我正在编写一个使用一些动画逻辑的时钟应用程序。在 onCreate() 中,我的应用程序 Activity 分配了一个扩展 Thread 的类的实例,该类在 run() 中循环执行逻辑处理。我正在使用
我正在编写一个 javascript 程序,其中包含一个运行时间非常长的 foreach 循环,如下所示: for (property in object) { difficultTask()
我有文章和图片部分:
我使用 GCD 在 UIWebView 中运行 javascript,当它是正常的 javascipt 时,一切似乎都找到了,但是当涉及到“警报”时,弹出模态视图使我的用户界面变得无响应。 这是我在
我是一名优秀的程序员,十分优秀!