首页 > 解决方案 > PyQt4:如何通过单击按钮从一个窗口切换到另一个窗口

问题描述

因此,我为我的 python 类构建了一个“TeacherPortal”,老师希望我们通过单击专门使用 PyQt4 的按钮转到另一个窗口。我环顾四周,但我只发现了 PyQt5,我对 GUI 还是很陌生

我尝试创建 2 个不同的类,一个用于主窗口,另一个用于第二个窗口(它们是单独的类),我将一个按钮与它链接到另一个类,但它不起作用

from PyQt4 import QtGui, QtCore
import sys

class Window(QtGui.QMainWindow):
    def __init__(self):
        super(Window,self).__init__()
        self.setWindowTitle("TeahcherPortal")
        self.setGeometry(50,50,800,600)

        self.FirstWindow()

    def FirstWindow(self):
        btn = QtGui.QPushButton("Login",self)
        btn.clicked.connect(SecondPage())
        btn.move(400,300)

        self.show()

class SecondPage(QtGui.QMainWindow):
    def __init__(self):
        super(SecondPage,self).__init__()
        self.setGeometry(50,50,800,600)



def run():
    app = QtGui.QApplication(sys.argv)
    GUI = Window()
    Page = SecondPage()
    sys.exit(app.exec_())

run()

我预计它会转到另一个窗口,但遗憾的是这并没有发生。但发生的事情是我得到一个错误TypeError: connect() slot argument should be a callable or a signal, not 'SecondPage'

标签: pythonpyqt4

解决方案


试试看:

import sys
# PyQt5
from PyQt5.QtCore    import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui     import *

# PyQt4
#from PyQt4.QtCore    import *
#from PyQt4.QtGui     import *

class Window(QMainWindow):
    def __init__(self):
        super(Window,self).__init__()
        self.setWindowTitle("TeahcherPortal")
        self.setGeometry(50,50,800,600)

        self.FirstWindow()

    def FirstWindow(self):
        btn = QPushButton("Login", self)
        btn.clicked.connect(self.secondPage)    # - (SecondPage())
        btn.move(400,300)

        self.show()

    def secondPage(self):                       # +++
        self.secondWindow = SecondPage()
        self.secondWindow.show()

class SecondPage(QMainWindow):     
    def __init__(self):
        super(SecondPage,self).__init__()
        self.setWindowTitle("SecondPage")
        self.setGeometry(50,50,800,600)


def run():
    app = QApplication(sys.argv)
    GUI = Window()
    Page = SecondPage()
    sys.exit(app.exec_())

run()

在此处输入图像描述


推荐阅读