Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 返回到上一个窗口_Python_Qt_Pyqt_Pyqt5 - Fatal编程技术网

Python 返回到上一个窗口

Python 返回到上一个窗口,python,qt,pyqt,pyqt5,Python,Qt,Pyqt,Pyqt5,我正在使用QtCreator为我的论文创建一个GUI。我正在研究按钮的功能,以转到一个窗口并返回到上一个窗口 我已经完成了去另一个窗口的功能 我在返回上一个窗口时遇到问题。我总是得到错误formTrain.hide()未定义 如何解决此错误 主窗口的代码 import sys from PyQt5 import QtCore, QtGui, QtWidgets from testsys_auto import Ui_testsys from trainsys_auto import * c

我正在使用QtCreator为我的论文创建一个GUI。我正在研究按钮的功能,以转到一个窗口并返回到上一个窗口

我已经完成了去另一个窗口的功能

我在返回上一个窗口时遇到问题。我总是得到错误
formTrain.hide()
未定义

如何解决此错误

主窗口的代码

import sys

from PyQt5 import QtCore, QtGui, QtWidgets

from testsys_auto import Ui_testsys
from trainsys_auto import *

class Ui_MainWindow(object):
    def trainsys(self):
     self.trainwin = QtWidgets.QMainWindow()
     self.ui = Ui_trainsys()
     self.ui.setupUi(self.trainwin)
     formMain.hide()
     self.trainwin.show()
   def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(405, 307)
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.verticalLayoutWidget = QtWidgets.QWidget(self.centralWidget)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(110, 120, 160, 107))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.btn_TrainSys = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.btn_TrainSys.setObjectName("btn_TrainSys")
        self.verticalLayout.addWidget(self.btn_TrainSys)
        self.btn_TrainSys.clicked.connect(self.trainsys)
def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Home Screen"))
        self.btn_TrainSys.setText(_translate("MainWindow", "Train System"))
        self.label.setText(_translate("MainWindow", "Diabetic Retinopathy Detection"))


if __name__ == "__main__":
 app = QtWidgets.QApplication(sys.argv)
 formMain = QtWidgets.QMainWindow()
 ui = Ui_MainWindow()
 ui.setupUi(formMain)
 formMain.show()
 sys.exit(app.exec_())
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from mainwindow1 import *

class Ui_trainsys(object):

   def backhome(self):
        self.backwin = QtWidgets.QMainWindow()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self.backwin)
        formTrain.hide()
        self.backwin.show()

   def setupUi(self, trainsys):
       self.btn_Backtrain = QtWidgets.QPushButton(self.verticalLayoutWidget)
       self.btn_Backtrain.setObjectName("btn_Backtrain")

       self.btn_Backtrain.clicked.connect(self.backhome)
    def retranslateUi(self, trainsys):
        _translate = QtCore.QCoreApplication.translate
        trainsys.setWindowTitle(_translate("trainsys", "Train System")
        self.btn_Backtrain.setText(_translate("trainsys", "Back to Home Screen"))
        self.label.setText(_translate("trainsys", "Train System"))



if __name__ == "__main__":
 app = QtWidgets.QApplication(sys.argv)
 formTrain = QtWidgets.QMainWindow()
 ui = Ui_trainsys()
 ui.setupUi(formTrain)
 formTrain.show()
 sys.exit(app.exec_())
列车系统的代码窗口

import sys

from PyQt5 import QtCore, QtGui, QtWidgets

from testsys_auto import Ui_testsys
from trainsys_auto import *

class Ui_MainWindow(object):
    def trainsys(self):
     self.trainwin = QtWidgets.QMainWindow()
     self.ui = Ui_trainsys()
     self.ui.setupUi(self.trainwin)
     formMain.hide()
     self.trainwin.show()
   def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(405, 307)
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.verticalLayoutWidget = QtWidgets.QWidget(self.centralWidget)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(110, 120, 160, 107))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.btn_TrainSys = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.btn_TrainSys.setObjectName("btn_TrainSys")
        self.verticalLayout.addWidget(self.btn_TrainSys)
        self.btn_TrainSys.clicked.connect(self.trainsys)
def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Home Screen"))
        self.btn_TrainSys.setText(_translate("MainWindow", "Train System"))
        self.label.setText(_translate("MainWindow", "Diabetic Retinopathy Detection"))


if __name__ == "__main__":
 app = QtWidgets.QApplication(sys.argv)
 formMain = QtWidgets.QMainWindow()
 ui = Ui_MainWindow()
 ui.setupUi(formMain)
 formMain.show()
 sys.exit(app.exec_())
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from mainwindow1 import *

class Ui_trainsys(object):

   def backhome(self):
        self.backwin = QtWidgets.QMainWindow()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self.backwin)
        formTrain.hide()
        self.backwin.show()

   def setupUi(self, trainsys):
       self.btn_Backtrain = QtWidgets.QPushButton(self.verticalLayoutWidget)
       self.btn_Backtrain.setObjectName("btn_Backtrain")

       self.btn_Backtrain.clicked.connect(self.backhome)
    def retranslateUi(self, trainsys):
        _translate = QtCore.QCoreApplication.translate
        trainsys.setWindowTitle(_translate("trainsys", "Train System")
        self.btn_Backtrain.setText(_translate("trainsys", "Back to Home Screen"))
        self.label.setText(_translate("trainsys", "Train System"))



if __name__ == "__main__":
 app = QtWidgets.QApplication(sys.argv)
 formTrain = QtWidgets.QMainWindow()
 ui = Ui_trainsys()
 ui.setupUi(formTrain)
 formTrain.show()
 sys.exit(app.exec_())

建议不要修改Qt设计器生成的类,如果您是初学者,请不要修改该代码。最简单、最优雅的方法是创建实现逻辑的类,并使用初始类的设计

假设使用Qt Designer创建视图时使用了MainWindow模板,则实现逻辑的类应具有以下形式:

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.setupUi(self)

class Trainsys(QtWidgets.QMainWindow, Ui_trainsys):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.setupUi(self)
在您的案例中,返回的逻辑是隐藏当前窗口并显示窗口,为此,我们创建以下函数:

def changeWindow(w1, w2):
    w1.hide()
    w2.show()
然后,单击每个按钮时,我们使用lambda函数调用它们:

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    main = MainWindow()
    trainsys = Trainsys()

    main.btn_TrainSys.clicked.connect(lambda: changeWindow(main, trainsys))
    trainsys.btn_Backtrain.clicked.connect(lambda: changeWindow(trainsys, main))

    main.show()
    sys.exit(app.exec_())

注意:如果您修改了这些类,您只需在pyuic的帮助下使用.ui文件生成退货。

谢谢您的回答。对我来说,创建一个单独的python文件更好吗?在这个文件中,我将只导入由Qt设计器生成的mainwindow和trainsys类?我将放置您提供的第一组代码?为了更好地对代码进行排序,只需导入设计,即UI_xxx,然后复制我提出的所有代码。