我为数据分析编写了一个脚本(test.py)。现在我在PyQt中做了一个GUI。 我想要的是当我按下按钮'运行'脚本test.py将运行并显示结果(图)。
我尝试了subprocess.call('test1.py')
和subprocess.Popen('test1.py')
,但它只会打开脚本并且不会运行它。
我也试过os.system
,也没有。
以下脚本未完成(有更多按钮和功能相关但不相关且无法解决所述问题。)
我在Spyder和PyQt5上使用Python 3.6。
还有其他功能或模块可以做我想要的吗?
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_()
答案 0 :(得分:1)
您可以随时导入test1.py并从中调用函数
答案 1 :(得分:0)
您需要做的是创建一个文本标签,然后将stdout / stderr传递给subprocess.PIPE
:
p = subprocess.Popen(
"python test1.py",
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
然后拨打subprocess.Popen.communicate()
:
stdout, stderr = p.communicate()
# Display stdout (and possibly stderr) in a text label
答案 2 :(得分:0)
QProcess类用于启动外部程序并与之通信。
试一试:
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_()