Python Can';t在PyQt5中打开多个窗口

Python Can';t在PyQt5中打开多个窗口,python,pyqt,pyqt4,pyqt5,Python,Pyqt,Pyqt4,Pyqt5,因此,我已经使用PyQt设计器制作了几个GUI,我的目标是让它们彼此链接,并且能够彼此打开。我已经获得了启动页面来打开主页,但是当我单击主页上的相应按钮打开其他页面时,它会使我的程序崩溃。如果您能帮助解决此问题,我们将不胜感激 我的代码如下: import sys from PyQt5 import QtGui, QtCore, QtWidgets from StartupPage import Ui_StartupWindow from HomePage import Ui_HomeWindo

因此,我已经使用PyQt设计器制作了几个GUI,我的目标是让它们彼此链接,并且能够彼此打开。我已经获得了启动页面来打开主页,但是当我单击主页上的相应按钮打开其他页面时,它会使我的程序崩溃。如果您能帮助解决此问题,我们将不胜感激

我的代码如下:

import sys
from PyQt5 import QtGui, QtCore, QtWidgets
from StartupPage import Ui_StartupWindow
from HomePage import Ui_HomeWindow
from FoodPage import Ui_FoodWindow
from ExercisePage import Ui_ExerciseWindow
from ProfilePage import Ui_ProfileWindow

class Startup(QtWidgets.QMainWindow, Ui_StartupWindow):
    def __init__(self, parent=None):
        super(Startup, self).__init__(parent)
        self.setupUi(self)
        self.NewEntryButton.clicked.connect(self.NewButtonHandle)
        self.ContinueButton.clicked.connect(self.ContinueButtonHandle)
        self.HomeP=Home()

    def NewButtonHandle(self):
        self.HomeP.show()

    def ContinueButtonHandle(self):
        self.HomeP.show()

class Home(QtWidgets.QMainWindow, Ui_HomeWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.setupUi(self)
        self.FoodP=Food()
        self.ExerciseP=Exercise()
        self.ProfileP=Profile()
        self.exerciseButton.clicked.connect(self.ExerciseButtonHandle)
        self.foodButton.clicked.connect(self.FoodButtonHandle)
        self.profileButton.clicked.connect(self.ProfileButtonHandle)

    def ExerciseButtonHandle():
        self.ExerciseP.show()

    def FoodButtonHandle():
        self.FoodP.show()

    def ProfileButtonHandle():
        self.ProfileP.show()

class Food(QtWidgets.QMainWindow, Ui_FoodWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.setupUi(self)

class Exercise(QtWidgets.QMainWindow, Ui_ExerciseWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.setupUi(self)

class Profile(QtWidgets.QMainWindow, Ui_ProfileWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.setupUi(self)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = Startup()
    window.show()
    sys.exit(app.exec_())

尝试将导入系统移动到:

if __name__ == '__main__':
    import sys  """<--------------------------here"""
    app = QtWidgets.QApplication(sys.argv)
    window = Startup()
    window.show()
    sys.exit(app.exec_())
如果uuuu name_uuuu=='\uuuuuuu main\uuuuuu':
导入系统“””尝试以下操作:

import Homepage                    #import the whole thing
然后:


了解程序崩溃时显示的错误消息可能很有用

话虽如此,我最近也在摆弄类似的东西,下面的内容似乎很好。请注意,它与您所做的基本相同

此外,我还想在主(主)窗口的任何子窗口(window1、window2、window3)打开时阻止与主(主)窗口的交互,以迫使用户一次只关注一个任务,而不是打开多个窗口,因此使用setEnabled()调用

self.Window1.setEnabled(True)
home.toWindow1()中需要行,因为Window1是home的成员,因此,由于第一次setEnabled调用,它将与home的所有其他成员一起被禁用

还有,虽然我把我的

import sys
在Volodymyr建议的main方法中,这只是为了整洁。如果导入是代码的第一行或main方法的第一行,那么对sys的引用也会解决(作用域规则,LEGB),我不认为在这两个位置使用它会导致任何问题(除非在文件开始时导入,然后为变量sys分配了不同的值)

我也没有看到像Bahnzo建议的那样,从

from HomePage import Ui_HomeWindow

然后,稍后将Ui_HomeWindow称为HomePage.Ui_HomeWindow会有任何不同,原因相同-唯一的情况是,如果在导入发生后,在类定义中使用Ui_HomeWindow之前,Ui_HomeWindow显式地为其指定了一些值-您可以看到,OP的代码中不会出现这种情况

#!/bin/python3

from PyQt5.QtWidgets import QApplication, QMainWindow
from startwindow import Ui_startWindow
from homewindow import Ui_homeWindow
from window1 import Ui_Window1
from window2 import Ui_Window2
from window3 import Ui_Window3


class start(QMainWindow, Ui_startWindow):
    def __init__(self):
        super(start, self).__init__(None)
        self.setupUi(self)
        self.homeButton.clicked.connect(self.toHome)
        self.home = home()

    def toHome(self):
        self.home.show()
        self.hide()

class home(QMainWindow, Ui_homeWindow):
    def __init__(self):
        super(home, self).__init__(None)
        self.setupUi(self)
        self.window1Button.clicked.connect(self.toWindow1)
        self.window2Button.clicked.connect(self.toWindow2)
        self.window3Button.clicked.connect(self.toWindow3)
        self.Window1 = window1(self)
        self.Window2 = window2(self)
        self.Window3 = window3(self)

    def toWindow1(self):
        self.Window1.show()
        self.setEnabled(False)
        self.Window1.setEnabled(True)

    def toWindow2(self):
        self.Window2.show()
        self.setEnabled(False)
        self.Window2.setEnabled(True)

    def toWindow3(self):
        self.Window3.show()
        self.setEnabled(False)
        self.Window3.setEnabled(True)

    def reEnable(self):
        self.setEnabled(True)

class window1(QMainWindow, Ui_Window1):
    def __init__(self, home):
        super(window1, self).__init__(home)
        self.home = home
        self.setupUi(self)
        self.homeButton.clicked.connect(self.toHome)

    def toHome(self):
        self.home.setEnabled(True)
        self.hide()


class window2(QMainWindow, Ui_Window2):
    def __init__(self, home):
        super(window2, self).__init__(home)
        self.home = home
        self.setupUi(self)
        self.homeButton.clicked.connect(self.toHome)

    def toHome(self):
        self.home.setEnabled(True)
        self.hide()

class window3(QMainWindow, Ui_Window3):
    def __init__(self, home):
        super(window3, self).__init__(home)
        self.home = home
        self.setupUi(self)
        self.homeButton.clicked.connect(self.toHome)

    def toHome(self):
        self.home.setEnabled(True)
        self.hide()
import HomePage
#!/bin/python3

from PyQt5.QtWidgets import QApplication, QMainWindow
from startwindow import Ui_startWindow
from homewindow import Ui_homeWindow
from window1 import Ui_Window1
from window2 import Ui_Window2
from window3 import Ui_Window3


class start(QMainWindow, Ui_startWindow):
    def __init__(self):
        super(start, self).__init__(None)
        self.setupUi(self)
        self.homeButton.clicked.connect(self.toHome)
        self.home = home()

    def toHome(self):
        self.home.show()
        self.hide()

class home(QMainWindow, Ui_homeWindow):
    def __init__(self):
        super(home, self).__init__(None)
        self.setupUi(self)
        self.window1Button.clicked.connect(self.toWindow1)
        self.window2Button.clicked.connect(self.toWindow2)
        self.window3Button.clicked.connect(self.toWindow3)
        self.Window1 = window1(self)
        self.Window2 = window2(self)
        self.Window3 = window3(self)

    def toWindow1(self):
        self.Window1.show()
        self.setEnabled(False)
        self.Window1.setEnabled(True)

    def toWindow2(self):
        self.Window2.show()
        self.setEnabled(False)
        self.Window2.setEnabled(True)

    def toWindow3(self):
        self.Window3.show()
        self.setEnabled(False)
        self.Window3.setEnabled(True)

    def reEnable(self):
        self.setEnabled(True)

class window1(QMainWindow, Ui_Window1):
    def __init__(self, home):
        super(window1, self).__init__(home)
        self.home = home
        self.setupUi(self)
        self.homeButton.clicked.connect(self.toHome)

    def toHome(self):
        self.home.setEnabled(True)
        self.hide()


class window2(QMainWindow, Ui_Window2):
    def __init__(self, home):
        super(window2, self).__init__(home)
        self.home = home
        self.setupUi(self)
        self.homeButton.clicked.connect(self.toHome)

    def toHome(self):
        self.home.setEnabled(True)
        self.hide()

class window3(QMainWindow, Ui_Window3):
    def __init__(self, home):
        super(window3, self).__init__(home)
        self.home = home
        self.setupUi(self)
        self.homeButton.clicked.connect(self.toHome)

    def toHome(self):
        self.home.setEnabled(True)
        self.hide()