实例 | PyQt5动态更新小部件内容

栏目: 编程工具 · 发布时间: 5年前

内容简介:在文章《美化PyQt5图形界面》中,有的小伙伴提问界面美化完之后如何调用和切换各个按钮之间的内容呢?今天,州的先生(https://zmister.com)就用一个简单的Demo实例演示一下,如何通过按钮动态切换部件的内容。为了便于理解,我们就用几个简单的小部件来作演示,其中包含:其构建代码如下所示:

在文章《美化PyQt5图形界面》中,有的小伙伴提问界面美化完之后如何调用和切换各个按钮之间的内容呢?今天,州的先生(https://zmister.com)就用一个简单的Demo实例演示一下,如何通过按钮动态切换部件的内容。

创建图形界面窗口

为了便于理解,我们就用几个简单的小部件来作演示,其中包含:

  • 3个按钮,用于点击操作;
  • 1个文本,用于显示按钮操作的内容;

其构建代码如下所示:

class Demo(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.init_ui()
 
    def init_ui(self):
        self.setWindowTitle("州的先生zmister.com PyQt5实例")
        main_widget = QtWidgets.QWidget() # 创建一个主部件
        main_widget_layout = QtWidgets.QHBoxLayout() # 创建一个水平布局
        main_widget.setLayout(main_widget_layout) # 设置主部件的布局为水平布局
 
        left_widget = QtWidgets.QWidget() # 创建左侧按钮部件
        left_widget_layout = QtWidgets.QVBoxLayout() # 创建一个垂直布局
        left_widget.setLayout(left_widget_layout) # 设置左侧按钮部件布局为垂直布局
 
        button_1 = QtWidgets.QPushButton("第一个按钮") # 创建按钮
        button_2 = QtWidgets.QPushButton("第二个按钮")
        button_3 = QtWidgets.QPushButton("第三个按钮")
 
        left_widget_layout.addWidget(button_1) # 将按钮添加到左侧部件的布局中
        left_widget_layout.addWidget(button_2)
        left_widget_layout.addWidget(button_3)
 
        right_widget = QtWidgets.QWidget() # 创建一个右侧部件
        self.right_widget_layout = QtWidgets.QGridLayout() # 创建一个网格布局
        right_widget.setLayout(self.right_widget_layout) # 设置右侧部件的布局为网格布局
 
        main_widget_layout.addWidget(left_widget) # 将左侧部件和右侧部件添加到主部件中
        main_widget_layout.addWidget(right_widget)
        self.setCentralWidget(main_widget) # 设置窗口的默认部件为主部件
 
if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    gui = Demo()
    gui.show()
    sys.exit(app.exec_())
 

运行上述代码,我们可以看到这个图形界面窗口的结构,如下图所示:

实例 | PyQt5动态更新小部件内容

麻雀虽小,五脏俱全。我们需要的效果是点击左侧不同的按钮,右侧就会显示不同的内容。这需要使用到信号槽。下面,我们来编写响应按钮点击信号的槽函数。

响应按钮点击信号

因为在上面创建的图形界面窗口中,右侧是一个网格布局的Widget(),所以我们只需要根据按钮的点击信号往其中添加其他的小部件就可以了。

在Demo()中继续创建一个方法,在这个方法中,我们首先遍历右侧布局中的所有子部件,将其删除,然后实例化一个QLabel()部件,最后将其添加到网格布局中,其代码如下所示:

# 点击按钮的槽函数
def click_button(self,btn):
    # 遍历右侧布局中的子部件,将其删除
    while self.right_widget_layout.count():
        child = self.right_widget_layout.takeAt(0)
        if child.widget():
            child.widget().deleteLater()
    text = QtWidgets.QLabel("这是按钮{}的文本".format(btn)) # 创建一个文本部件
    self.right_widget_layout.addWidget(text) # 将文本部件添加到右侧布局中。
 

可以看到,在这个方法中,我们还接收一个参数btn,这个参数用来标识不同的按钮点击。

我们接着将3个按钮的点击信号连接到这个方法上:

button_1.clicked.connect(lambda : self.click_button(1))
button_2.clicked.connect(lambda: self.click_button(2))
button_3.clicked.connect(lambda: self.click_button(3))
 

在这里我们使用了匿名函数lambda来对槽函数进行参数的传递,这样不同的按钮点击就会产生不同的参数。运行代码,我们会得到如下动图所示的效果:

实例 | PyQt5动态更新小部件内容

可以看到,当我们点击第一个按钮的时候,右侧显示的是按钮1的文本,点击第二个按钮的时候显示的是第二个按钮的文本,点击第三个按钮的时候显示的是第三个按钮的文本。这样我们就实现了通过按钮切换不同的内容。

如果需要进行扩展,可以将QLabel()部件换成其他相应的部件即可。

有什么问题欢迎留言讨论~


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

产品设计思维

产品设计思维

王丁 / 机械工业出版社 / 2017-8-1 / 79

这是一本关于“产品设计思维与方法”方面的实战书籍。融合了笔者多年行为实践经验,以大量的图例和案例详细展现产品设计背后的真实思维与构建方法,全面系统地分析电子商务产品设计方案,从规划、架构、逻辑、原型等多个方面对电商平台的产品设计过程进行细致分享。 在互联网产品设计领域,设计理念与设计方法却是能持续复用的,只要你掌握了一套行之有效的互联网产品设计方法论与工具,那无论是从事什么样的行业,你都能快......一起来看看 《产品设计思维》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具