Python PyQT关闭并重新打开应用程序

Python PyQT关闭并重新打开应用程序,python,pyqt,Python,Pyqt,下面代码中的按钮应该关闭程序窗口并重新打开它。重启部分在不同的上下文中工作得非常好,但我无法在这个上下文中工作。 你知道我在这里遗漏了什么吗?更多有经验的人的帮助将不胜感激 import sys import subprocess from PyQt4 import QtCore, QtGui class MainWindow(QtGui.QMainWindow): def __init__(self, parent=None): super(MainWindow,

下面代码中的按钮应该关闭程序窗口并重新打开它。重启部分在不同的上下文中工作得非常好,但我无法在这个上下文中工作。 你知道我在这里遗漏了什么吗?更多有经验的人的帮助将不胜感激

import sys
import subprocess
from PyQt4 import QtCore, QtGui

class MainWindow(QtGui.QMainWindow):

    def __init__(self, parent=None):

        super(MainWindow, self).__init__(parent)

        self.win_widget = WinWidget(self)
        widget = QtGui.QWidget()
        layout = QtGui.QVBoxLayout(widget)
        layout.addWidget(self.win_widget)
        self.setCentralWidget(widget)

        self.statusBar().showMessage('Ready')

        self.setGeometry(300, 300, 450, 250)
        self.setWindowTitle('Test')  
        self.setWindowIcon (QtGui.QIcon('logo.png'))
        self.show()

class WinWidget (QtGui.QWidget) : 

    def __init__(self, parent): 

        super (WinWidget , self).__init__(parent)
        self.controls()
        self.grid_layout() 

    def controls(self):

        self.btn_newSearch = QtGui.QPushButton('New Search  ', self)
        self.btn_newSearch.clicked.connect(self.restart)
        self.btn_newSearch.setFont(QtGui.QFont('CourierNew', 12 , QtGui.QFont.Bold,False))

    def restart(self):
        self.close()
        subprocess.call("python" + "question.py  ", shell=True)

    def grid_layout (self) : 
        grid = QtGui.QGridLayout()
        grid.setSpacing(2)
        grid.addWidget(self.btn_newSearch , 1 , 1)
        self.setLayout(grid)

def main():

    app = QtGui.QApplication(sys.argv)
    win = MainWindow()
    win.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

如果
python
位于
PATH
环境变量中,则不需要
shell=True
参数。您可能也不想使用
subprocess.call
,因为它会阻塞

subprocess.Popen(['python', 'question.py'])

看起来您缺少一个空格
“python”+“question.py”
等于
“pythonquestion.py”
Brendan,谢谢您的回答。Sorrt,但我不明白:正确的语法是什么?Brendan,非常感谢,这很有帮助。close()命令不起作用,因此窗口仍保持打开状态。我在开始时添加了命令行“self.btn_newSearch.clicked.connect(QtCore.QCoreApplication.instance().quit)”,是什么解决了这个问题。您知道如何从def重新启动中关闭窗口吗?如果python代码变成可执行文件,这个命令仍然有效吗?