我的长期目标是为实验物理实验建立一个图形用户界面,它有一个连续运行的图形用户界面。通过按下一个按钮,我希望能够运行我选择的pyhton脚本,它可以与正在运行的gui交互。例如,将数字设定为数字调整框。 我附加了一个启动项目。一个数字调整框和一个按钮。如果按下按钮,则会在数字调整框中设置一个随机数字,一旦数字调整框中的数字发生变化,它就会打印数字。 有没有一种方法可以通过按下按钮来调用脚本(目前有一个硬编码的路径),然后将gui中的数字设置为我的选择。脚本的内容(在本例中为数字调整框设置的数字)必须在gui运行时可编辑。 如果你能提供一个例子,我将不胜感激,并可以建立其余的自己。在
提前谢谢!在
import sys
import random
from PyQt5 import QtCore, QtGui
from PyQt5.QtWidgets import QApplication, QWidget, QDoubleSpinBox, QPushButton
class GuiInteraction(QWidget):
def __init__(self):
super().__init__()
self.initGUI()
self.CallBackFunctions()
def initGUI(self):
self.resize(400, 500)
self.move(300, 300)
self.setWindowTitle('Gui Interaction')
self.doubleSpinBox = QDoubleSpinBox(self)
self.doubleSpinBox.setGeometry(QtCore.QRect(120, 130, 120, 25))
self.doubleSpinBox.setDecimals(5)
self.doubleSpinBox.setMaximum(1000)
self.doubleSpinBox.setObjectName("doubleSpinBox")
self.pushButton = QPushButton("Run Script", self)
self.pushButton.setGeometry(QtCore.QRect(100, 300, 100, 40))
self.pushButton.setObjectName("pushButton")
def CallBackFunctions(self):
self.pushButton.clicked.connect(self.buttonClicked)
self.doubleSpinBox.valueChanged.connect(self.valueChanged)
def buttonClicked(self):
self.doubleSpinBox.setValue(random.uniform(1, 200))
def valueChanged(self):
print(self.doubleSpinBox.value())
if __name__ == '__main__':
app = QApplication(sys.argv)
MyWindow = GuiInteraction()
MyWindow.show()
sys.exit(app.exec_())
我想你可以调用一个FileDialog,选择一个脚本并使用:
,而脚本应该充分构建为某种“运行”函数,您可以通过以下方式启动它:
^{pr2}${也检查^ a1。在
一种方法是通过stdin/stdout与外部脚本通信
我的_脚本.py
图形用户界面_脚本.py
^{pr2}$如果需要将参数传递给函数,只需将它们作为附加参数传递给
subprocess.check_output
调用,然后它们从sys.argv
读取它们(它们都是以字符串形式出现的,因此如果需要,您必须转换类型,或者使用像argparse
这样的库,可以为您进行类型转换)。在我选择了“无敌舰队”的解决方案,尽管我改变了一点。经过简短的研究,}库所取代,我现在使用这个库。添加了以下行:
__import__
似乎被{页眉:
在主要功能中:
^{pr2}$我的问题由importlib行回答。我还想在一个子线程中启动脚本,因此,在它由于打字错误或其他原因而崩溃的情况下,整个gui不会跟着崩溃而崩溃。在
ExternalScript位于同一文件夹中,名为ExternalScript.py在
三行简单的代码。我可以在运行时更改这些行,并在数字调整框中获取不同的值。效果很好!在
相关问题 更多 >
编程相关推荐