下面我来详细讲解一下Python的PyQt5中QStacked小工具的使用攻略。首先要介绍一下QStacked小工具,它是一种用于显示多个页面并允许用户切换它们的小工具。我们可以通过QStackedWidget类来创建它,它可以包含多个QWidget对象,相当于一个容器来装载这些QWidget对象。
使用QStacked小工具,我们可以非常方便地实现一些特定的界面效果,比如登陆与注册页的切换、设置页与主界面之间的切换等等。
下面是QStacked小工具的使用步骤:
创建QStacked小工具
stackedWidget = QtWidgets.QStackedWidget(self)
这里我们创建了一个QStackedWidget对象,把它作为窗口的子组件。注意self是指当前窗口对象。
添加QWidget
widget1 = QWidget()
widget2 = QWidget()
stackedWidget.addWidget(widget1)
stackedWidget.addWidget(widget2)
我们可以创建多个QWidget对象,然后通过addWidget()方法将它们添加到QStacked小工具中,QStacked小工具会默认按照添加的顺序依次显示这些QWidget。
切换QWidget
stackedWidget.setCurrentIndex(1)
我们可以通过setCurrentIndex()方法切换当前显示的QWidget,这里setCurrentIndex(1)表示切换到第二个QWidget对象。
以上就是QStacked小工具的使用步骤,下面我们来看两个示例应用:
示例一:登陆与注册页的切换
我们可以通过QStacked小工具实现登陆与注册页的切换效果,代码如下:
class LoginWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.usernameLabel = QLabel("用户名:")
self.passwordLabel = QLabel("密码:")
self.usernameLineEdit = QLineEdit()
self.passwordLineEdit = QLineEdit()
self.loginButton = QPushButton("登陆")
self.registerButton = QPushButton("去注册")
self.loginButton.clicked.connect(self.login)
self.registerButton.clicked.connect(self.gotoRegister)
layout = QVBoxLayout()
layout.addWidget(self.usernameLabel)
layout.addWidget(self.usernameLineEdit)
layout.addWidget(self.passwordLabel)
layout.addWidget(self.passwordLineEdit)
layout.addWidget(self.loginButton)
layout.addWidget(self.registerButton)
self.setLayout(layout)
def login(self):
# 登陆操作
pass
def gotoRegister(self):
stackedWidget.setCurrentIndex(1)
class RegisterWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.usernameLabel = QLabel("用户名:")
self.passwordLabel = QLabel("密码:")
self.usernameLineEdit = QLineEdit()
self.passwordLineEdit = QLineEdit()
self.registerButton = QPushButton("注册")
self.loginButton = QPushButton("去登陆")
self.registerButton.clicked.connect(self.register)
self.loginButton.clicked.connect(self.gotoLogin)
layout = QVBoxLayout()
layout.addWidget(self.usernameLabel)
layout.addWidget(self.usernameLineEdit)
layout.addWidget(self.passwordLabel)
layout.addWidget(self.passwordLineEdit)
layout.addWidget(self.registerButton)
layout.addWidget(self.loginButton)
self.setLayout(layout)
def register(self):
# 注册操作
pass
def gotoLogin(self):
stackedWidget.setCurrentIndex(0)
if __name__ == '__main__':
app = QApplication(sys.argv)
stackedWidget = QStackedWidget()
loginWidget = LoginWidget()
registerWidget = RegisterWidget()
stackedWidget.addWidget(loginWidget)
stackedWidget.addWidget(registerWidget)
stackedWidget.show()
sys.exit(app.exec_())
我们首先创建了一个LoginWidget,它包含了一个用户名输入框、一个密码输入框、一个登陆按钮和一个去注册按钮。当点击“去注册”按钮时,我们通过stackedWidget.setCurrentIndex(1)方法将当前显示的QWidget切换到RegisterWidget,从而实现登陆页和注册页的切换。
示例二:设置页与主界面之间的切换
我们也可以通过QStacked小工具实现设置页与主界面之间的切换效果,代码如下:
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
action = QAction("设置", self)
action.triggered.connect(self.showSetting)
menu = self.menuBar().addMenu("菜单")
menu.addAction(action)
self.centralWidget = QWidget()
self.stackedWidget = QStackedWidget(self.centralWidget)
self.mainWidget = QWidget()
self.settingWidget = QWidget()
self.label = QLabel("主界面")
self.mainLayout = QVBoxLayout()
self.mainLayout.addWidget(self.label)
self.mainWidget.setLayout(self.mainLayout)
self.textEdit = QTextEdit()
self.settingLayout = QVBoxLayout()
self.settingLayout.addWidget(self.textEdit)
self.settingWidget.setLayout(self.settingLayout)
self.stackedWidget.addWidget(self.mainWidget)
self.stackedWidget.addWidget(self.settingWidget)
self.setCentralWidget(self.centralWidget)
def showSetting(self):
self.stackedWidget.setCurrentIndex(1)
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
我们创建了一个MainWindow,它包含了一个主界面和一个设置页,当我们在菜单栏中点击“设置”时,就可以通过self.stackedWidget.setCurrentIndex(1)将当前显示的QWidget切换到settingWidget,从而实现主界面和设置页的切换。
以上两个示例说明了QStacked小工具的基本使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 – QStacked小工具 - Python技术站