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_())
有用记得回来点个赞~