kha*_*ldi 5 python pyqt python-3.x pyqt5
我使用 PyQt 来开发 GUI。像大多数 GUI 一样,它具有用于下一帧和前一帧的下一帧和后退按钮。每个帧都在一个单独的类中定义。问题是,对于“下一步”按钮的功能,您可以导入当前类中的下一个框架类,然后再导入show()它。但是对于'back',我们在尝试导入前一个类时收到错误。有人可以给出任何逻辑提示来为“后退”按钮创建相应的功能。
第一帧的类:
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)
.....
.....
.....
Run Code Online (Sandbox Code Playgroud)
第二帧:
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)
...
...
...
Run Code Online (Sandbox Code Playgroud)
首先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)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
您的问题是要显示一个窗口,您必须访问 window 对象,但在您的情况下,如果您想在多个文件中执行此操作,则可能会遇到循环导入、未定义变量等问题。正确的做法是所有窗口都有相同的范围。
然后我们将创建一个 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_())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3591 次 |
| 最近记录: |