上一个GUI框架的“后退”按钮的PyQt适当功能

时间:2018-09-24 13:27:59

标签: python python-3.x pyqt pyqt5

我使用PyQt开发GUI。像大多数GUI一样,它具有用于下一帧和上一帧的下一首和后退按钮。每个框架都在单独的类中定义。 问题是,对于“下一个”按钮的功能,您可以在当前类中导入下一类框架,然后<Grid Height="35" HorizontalAlignment="Right" MouseEnter="floater_MouseEnter" MouseLeave="floater_MouseLeave" > <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Canvas Grid.Column="1" Background="White" Height="32.7" VerticalAlignment="Top" Visibility="Visible" > <TextBlock Text="asdfsdf" FontSize="23"/> </Canvas> </Grid> 。但是对于“返回”,在尝试导入回上一类时,我们会收到错误。有人可以提供任何逻辑暗示来创建“后退”按钮的相应功能。

第一帧的类别:

show()

第二帧:

from GUI2 import secondwindow

class firstwindow(object):
    def nextWindow(self):
        self.window = QtWidgets.QMainWindow()
        self.ui = secondwindow()
        self.ui.setupUi(self.window)
        app.closeAllWindows()
        self.window.show()

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(622, 471)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(210, 140, 191, 41))
        self.pushButton.setCursor(QtGui.QCursor(QtCore.Qt.OpenHandCursor))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.nextWindow)
.....
.....
.....

1 个答案:

答案 0 :(得分:1)

首先Qt Designer提供的类不是小部件,并且建议您在重新编译时修改.ui会丢失逻辑修改。因此,对于前面的两个参数,我建议您还原两个文件。

ui_firstwindow.py

class ui_Firstwindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(622, 471)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(210, 140, 191, 41))
        self.pushButton.setCursor(QtGui.QCursor(QtCore.Qt.OpenHandCursor))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.nextWindow)

ui_secondwindow.py

class ui_Secondwindow(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(1200, 650)
        Dialog.setMinimumSize(QtCore.QSize(552, 0))

        self.pushButton_2 = QtWidgets.QPushButton(Dialog)
        self.pushButton_2.setGeometry(QtCore.QRect(480, 240, 70, 31))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_2.clicked.connect(self.previouswindow)

您的问题是要显示一个窗口,您必须访问该窗口对象,但如果要在多个文件中进行操作,则可能会出现循环导入,未定义变量等问题。正确的是所有窗口的作用域相同。

然后,我们将创建一个main.py文件,在该文件中,我们将使用先前的设计来实现实现小部件的类。我们创建一个将在其中创建窗口的类,并将单击的信号连接到另一个窗口的show()方法。在每个类中,按钮的单击信号都与窗口的hide()方法有关。

from PyQt5 import QtWidgets

from ui_firstwindow import ui_Firstwindow
from ui_secondwindow import ui_Secondwindow


class Firstwindow(QtWidgets.QMainWindow, ui_Firstwindow):
    def __init__(self, parent=None):
        super(Firstwindow, self).__init__(parent)
        self.setupUi(self)
        self.pushButton.clicked.connect(self.hide)


class Secondwindow(QtWidgets.QDialog, ui_Secondwindow):
    def __init__(self, parent=None):
        super(Secondwindow, self).__init__(parent)
        self.setupUi(self)
        self.pushButton_2.clicked.connect(self.hide)


class Manager:
    def __init__(self):
        self.first = Firstwindow()
        self.second = Secondwindow()

        self.first.pushButton.clicked.connect(self.second.show)
        self.second.pushButton_2.clicked.connect(self.first.show)

        self.first.show()


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    manager = Manager()
    sys.exit(app.exec_())