Run script from GUI
我写了一个用于数据分析的脚本(test.py)。现在我在Pyqt中做一个图形用户界面。我想要的是当我按下"运行"按钮时,脚本test.py将运行并显示结果(绘图)。
我试过
下面的脚本不完整(有更多的按钮和函数关联,但不相关,也无法连接到所描述的问题)。
我在spyder和pyqt5上使用python 3.6。
是否有其他功能或模块可以满足我的需求?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | class Window(QMainWindow): def __init__(self): super(Window, self).__init__() self.setGeometry(50, 50, 500, 300) self.setWindowTitle("TEMP FILE") self.home() def home (self): btn_run = QPushButton("Run", self) btn_run.clicked.connect(self.execute) self.show() def execute(self): subprocess.Popen('test1.py', shell=True) subprocess.call(["python","test1.py"]) if not QtWidgets.QApplication.instance(): app = QtWidgets.QApplication(sys.argv) else: app = QtWidgets.QApplication.instance() GUI = Window() app.exec_() |
您可以随时导入test1.py并从中调用函数
使用此选项,如何使一个python文件运行另一个文件?
qprocess类用于启动外部程序并与它们通信。
试试看:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | import sys import subprocess from PyQt5 import Qt from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton from PyQt5.QtCore import QProcess class Window(QMainWindow): def __init__(self): super(Window, self).__init__() self.setGeometry(50, 50, 500, 300) self.setWindowTitle("TEMP FILE") self.home() def home (self): btn_run = QPushButton("Run", self) #btn_run.clicked.connect(self.execute) # --- filepath ="python test1.py" # +++ btn_run.clicked.connect(lambda checked, arg=filepath: self.execute(arg)) # +++ self.show() def execute(self, filepath): # +++ #subprocess.Popen('test1.py', shell=True) #subprocess.call(["python","test1.py"]) # It works #subprocess.run("python test1.py") QProcess.startDetached(filepath) # +++ if not QApplication.instance(): app = QApplication(sys.argv) else: app = QApplication.instance() GUI = Window() app.exec_() |
。
您需要做的是创建一个文本标签,然后将stdout/stderr管道连接到
1 2 3 4 5 6 | p = subprocess.Popen( "python test1.py", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) |
然后打电话给
1 2 | stdout, stderr = p.communicate() # Display stdout (and possibly stderr) in a text label |
号