PyQt:实现滚动条控制界面按钮滚动(不使用Qt Designer)

本文详细介绍了如何在PyQt5中通过滚动条控制界面中的按钮进行滚动显示,重点讲解了创建槽函数和连接滚动条信号的方法。
摘要由CSDN通过智能技术生成

PyQt5实现通过滚动条控制界面中的按钮简单滚动显示

先上效果:

在这里插入图片描述
在这里插入图片描述

关键是创建更新按钮显示的槽函数,并将滚动条改变的信号连接到这个槽函数

    def updateButtonDisplay(self, value):  # 根据滚动条的值更新按钮显示的函数 
        for i, button in enumerate(self.buttons):  
            # 显示当前按钮组,隐藏其他按钮组  
            if i >=  value  and i <  value:  
                button.show()  
            else:  
                button.hide()  
                
 	self.scrollbar.valueChanged.connect(self.updateButtonDisplay)  # 连接滚动条值改变信号              

上完整代码:

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QScrollBar, QVBoxLayout, QHBoxLayout, QFrame, QWidget  
from PyQt5.QtCore import Qt  
import sys  
  
class MyMainWindow(QMainWindow):  
  
    def __init__(self):  
        super().__init__()  
  
        self.initUI()  
  
    def initUI(self):  
        self.setWindowTitle('PyQt5 Scrolling Buttons')  
        self.setGeometry(300, 300, 300, 500)  
  
        # 创建中心部件  
        self.central_widget = QWidget()  
        self.setCentralWidget(self.central_widget)  
  
        # 创建垂直布局来放置按钮  
        self.button_layout = QVBoxLayout()  
  
        # 创建按钮并添加到垂直布局中  
        self.buttons = [QPushButton(f'Button {i+1}', self.central_widget) for i in range(10)]  # 假设有10个按钮  
  
        # 将按钮添加到垂直布局  
        for button in self.buttons:  
            self.button_layout.addWidget(button)  
        # 初始时只显示前5个按钮  
        for i, button in enumerate(self.buttons[5:]):  
            button.hide()  
  
        # 创建一个框架作为按钮的容器  
        self.button_container = QFrame()  
        self.button_container.setLayout(self.button_layout)  
  
        # 创建垂直滚动条  
        self.scrollbar = QScrollBar(Qt.Vertical)  
        self.scrollbar.setRange(0, 1)  # 假设总共有2个按钮组(0到1)  
        self.scrollbar.setValue(0)  # 初始值设置为0,显示第1个按钮组  
        self.scrollbar.valueChanged.connect(self.updateButtonDisplay)  # 连接滚动条值改变信号  

        # 创建水平布局来放置按钮容器和滚动条  
        self.h_layout = QHBoxLayout()  
        self.h_layout.addWidget(self.button_container)  # 添加按钮容器  
        self.h_layout.addWidget(self.scrollbar)  # 添加滚动条  
  
        # 设置中心部件的布局  
        self.central_widget.setLayout(self.h_layout)  
  
    def updateButtonDisplay(self, value):  
        # 根据滚动条的值更新按钮的显示 
        # print(value) 
        offset = value * 5  # 计算当前应该显示的按钮组的索引  
        for i, button in enumerate(self.buttons):  
            # 显示当前按钮组,隐藏其他按钮组  
            if i >= offset and i < offset + 5:  
                button.show()  
            else:  
                button.hide()  
  
# 运行程序  
app = QApplication(sys.argv)  
window = MyMainWindow()  
window.show()  
sys.exit(app.exec_())

有用记得回来点个赞~

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值