python - 前一个 GUI 框架的 'Back' 按钮的 PyQt 适当函数

标签 python python-3.x pyqt pyqt5

我使用 PyQt 开发 GUI。与大多数 GUI 一样,它有用于下一帧和上一帧的下一帧和后退按钮。每个帧都在一个单独的类中定义。 问题是,对于“下一步”按钮的功能,您可以在当前类中导入下一类框架,然后 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)
.....
.....
.....

第二帧:

class secondwindow(object):
    def previousWindow(self):
        XXX
        XXX

    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)
...
...
...

最佳答案

首先Qt Designer提供的类不是widgets,建议重新编译时修改.ui会丢失逻辑的修改。因此,对于前面的 2 个参数,我建议您恢复这两个文件。

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)

你的问题是要显示一个窗口,你必须访问窗口对象,但在你的情况下,如果你想在多个文件中执行它,你可能会遇到循环导入、 undefined variable 等问题。正确的是所有窗口都具有相同的作用域。

然后我们将创建一个 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_())

关于python - 前一个 GUI 框架的 'Back' 按钮的 PyQt 适当函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52480526/

相关文章:

python - 如何在 Python 中使用 unDetected_chromedriver 运行 Firefox 浏览器?

python - 在 python 中获得大特征向量的最近 10 个欧几里德邻居的最快方法

python - 从python中的异步函数修改全局变量

python - 使用 django_tables2 在 django 中的表中添加 CSS 样式

python-3.x - 如何使用 openCV python 降低 USB 网络摄像头 2.0 的帧率

python - Stackless Python 和 PyQt

python - 如何在 Python 的方法中访问类

python - 在 Windows 中设置项目的相对 pythonpath (Visual Studio Code)

python - 在 QLabel 元素中实时显示 CV2

python - 在 QProgressBar 内添加文本和完成百分比