所以我使用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_())
答案 0 :(得分:0)
尝试将import sys移至:
if __name__ == '__main__':
import sys """<--------------------------here"""
app = QtWidgets.QApplication(sys.argv)
window = Startup()
window.show()
sys.exit(app.exec_())
尝试检查其他人是否导入此类模块。
答案 1 :(得分:0)
试试这个:
import Homepage #import the whole thing
然后:
class Home(QtWidgets.QMainWindow, Homepage.Ui_HomeWindow):
#import the UI there
答案 2 :(得分:0)
了解程序崩溃时显示的错误消息可能很有用。
话虽如此,我最近在摆弄类似的东西,但下面似乎工作得很好。请注意,它与您正在做的大致相同。
另外,当我的任何一个子窗口(window1,window2,window3)打开时,我想阻止与主(home)窗口的交互,以强制用户一次关注一个任务而不是打开多个窗口 - 因此setEnabled()调用。在
self.Window1.setEnabled(True)
home.toWindow1()中需要行,因为Window1是home的成员,因此第一次setEnabled调用会导致所有其他home成员被禁用。
另外,虽然我确实把我的
import sys
在Volodymyr建议的主要方法中,这只是为了整洁。如果导入是代码的第一行或主方法中的第一行,那么对sys的引用也将解析(范围规则,LEGB),我不知道如何在任一位置使用它可能导致任何问题(除非它是在文件的开头导入的,然后变量sys被分配了不同的值)。
我也没有看到改变进口,正如Bahnzo建议的那样
from HomePage import Ui_HomeWindow
到
import HomePage
然后稍后将Ui_HomeWindow称为HomePage.Ui_HomeWindow会有任何不同,出于同样的原因 - 唯一的情况是,如果Ui_homePage在导入发生后以及在类中使用它之前显式赋予了某个值定义 - 你可以看到在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()