PyQt4中的Stacked Widget应用

参考资料

PyQt4 tutorial :http://www.qaulau.com/books/PyQt4_Tutorial/index.html

PyQt4 Modules: http://pyqt.sourceforge.net/Docs/PyQt4/modules.html

例程:http://www.linuxidc.com/Linux/2012-06/63652p20.htm

主要功能

左边的list发生变化时,右边的Stacked Widget表现出不同的形式

代码

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *

QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))

class Example(QDialog):
    def __init__(self, parent=None):
        super(Example, self).__init__(parent)
        self.setWindowTitle("example")

        listWidget = QListWidget(self)
        listWidget.insertItem(0, "Button")
        listWidget.insertItem(1, "Label")
        listWidget.insertItem(2, "txt")

        stack = QStackedWidget()

        button = Button()
        label = Label()
        txt = Txt()
        stack.addWidget(button)
        stack.addWidget(label)
        stack.addWidget(txt)

        mainLayout = QHBoxLayout(self)
        mainLayout.setMargin(5)  # 对话框边距设为5 Margin 边距  5px
        mainLayout.setSpacing(5)  # 内部控件间距为5 Spacing间距  5px
        mainLayout.addWidget(listWidget)
        mainLayout.addWidget(stack, 0, Qt.AlignHCenter)
        mainLayout.setStretchFactor(listWidget, 1)
        mainLayout.setStretchFactor(stack, 3)  # 设定了list与stack比例为1:3。
        self.connect(listWidget, SIGNAL('currentRowChanged(int)'), stack, SLOT('setCurrentIndex(int)'))

class Button(QWidget):
    def __init__(self, parent=None):
        super(Button, self).__init__(parent)
        button1 = QPushButton("button 1")
        button2 = QPushButton("button 2")
        button3 = QPushButton("button 3")
        button4 = QPushButton("button 4")
        button5 = QPushButton("button 5")
        button6 = QPushButton("button 6")
        button7 = QPushButton("button 7")
        button8 = QPushButton("button 8")
        button9 = QPushButton("button 9")

        layout = QGridLayout(self)
        layout.addWidget(button1, 0, 0)
        layout.addWidget(button2, 0, 1)
        layout.addWidget(button3, 0, 2)
        layout.addWidget(button4, 1, 0)
        layout.addWidget(button5, 1, 1)
        layout.addWidget(button6, 1, 2)
        layout.addWidget(button7, 2, 0)
        layout.addWidget(button8, 2, 1)
        layout.addWidget(button9, 2, 2)

class Label(QWidget):
    def __init__(self, parent=None):
        super(Label, self).__init__(parent)
        label1 = QLabel("label 1")
        label2 = QLabel("label 2")
        label3 = QLabel("label 3")
        label4 = QLabel("label 4")
        label5 = QLabel("label 5")
        label6 = QLabel("label 6")
        label7 = QLabel("label 7")
        label8 = QLabel("label 8")
        label9 = QLabel("label 9")

        layout = QGridLayout(self)
        layout.addWidget(label1, 0, 0)
        layout.addWidget(label2, 0, 1)
        layout.addWidget(label3, 0, 2)
        layout.addWidget(label4, 1, 0)
        layout.addWidget(label5, 1, 1)
        layout.addWidget(label6, 1, 2)
        layout.addWidget(label7, 2, 0)
        layout.addWidget(label8, 2, 1)
        layout.addWidget(label9, 2, 2)

class Txt(QWidget):
    def __init__(self, parent=None):
        super(Txt, self).__init__(parent)

        label1 = QLabel("txt 1")
        label2 = QLabel("txt 2")
        label3 = QLabel("txt 3")

        txt1 = QLineEdit()
        txt2 = QLineEdit()
        txt3 = QLineEdit()

        layout = QGridLayout(self)
        layout.addWidget(label1, 0, 0)
        layout.addWidget(txt1, 0, 1)
        layout.addWidget(label2, 1, 0)
        layout.addWidget(txt2, 1, 1)
        layout.addWidget(label3, 2, 0)
        layout.addWidget(txt3, 2, 1)

app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Stacked Widget 是一个 Qt 的组件,可以用来实现多页面切换的界面。它允许你在同一个位置上放置多个子组件,但只有一个子组件是可见的。通过切换可见的子组件,你可以实现多页面切换的界面。 以下是一个简单的示例,演示如何使用 Stacked Widget 实现多页面切换的界面: 1. 在 Qt Designer 创建一个 Stacked Widget,并在其添加多个子组件。 2. 在你的代码,使用 QStackedWidget 类的 setCurrentIndex() 方法来切换可见的子组件。例如,当用户点击一个按钮时,你可以调用 setCurrentIndex() 方法来切换到相应的子组件。 下面是一个示例代码: ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QStackedWidget, QPushButton, QWidget, QVBoxLayout class MainWindow(QMainWindow): def __init__(self): super().__init__() # 创建一个 Stacked Widget self.stacked_widget = QStackedWidget(self) # 创建多个子组件 self.page1 = QWidget() self.page1_layout = QVBoxLayout() self.page1.setLayout(self.page1_layout) self.page1_button = QPushButton("切换到页面2") self.page1_button.clicked.connect(self.switch_to_page2) self.page1_layout.addWidget(self.page1_button) self.stacked_widget.addWidget(self.page1) self.page2 = QWidget() self.page2_layout = QVBoxLayout() self.page2.setLayout(self.page2_layout) self.page2_button = QPushButton("切换到页面1") self.page2_button.clicked.connect(self.switch_to_page1) self.page2_layout.addWidget(self.page2_button) self.stacked_widget.addWidget(self.page2) # 将 Stacked Widget 添加到主窗口 self.setCentralWidget(self.stacked_widget) def switch_to_page1(self): self.stacked_widget.setCurrentIndex(0) def switch_to_page2(self): self.stacked_widget.setCurrentIndex(1) if __name__ == "__main__": app = QApplication([]) window = MainWindow() window.show() app.exec_() ``` 在这个示例,我们创建了一个包含两个页面的 Stacked Widget。每个页面都包含一个按钮,点击按钮可以切换到另一个页面。我们使用 setCurrentIndex() 方法来切换页面。 注意,Stacked Widget 组件可以在 Qt Designer 直接拖拽和编辑子组件。你可以使用 Qt Designer 来创建和编辑你的界面,然后在代码使用它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值