当我们需要在QT图形界面中展示大量数据时,如果数据不能全部在一个窗口中显示,就需要使用到可滚动的标签(QScrollArea)。PyQt5也提供了这样的功能,本文将详细讲解如何使用PyQt5中的可滚动的标签。
1. 创建可滚动标签
首先,我们需要用代码创建一个可滚动的标签。下面是一个基本的示例代码:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QScrollArea
def main():
app = QApplication(sys.argv)
window = QWidget()
scroll_area = QScrollArea()
# 添加标签内容
widget = QWidget()
layout = QVBoxLayout(widget)
for i in range(100):
label = QLabel(f'标签{i+1}')
layout.addWidget(label)
scroll_area.setWidget(widget)
scroll_area.setHorizontalScrollBarPolicy(1)
scroll_area.setVerticalScrollBarPolicy(1)
vbox = QVBoxLayout()
vbox.addWidget(scroll_area)
window.setLayout(vbox)
window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
首先,我们创建了一个QScrollArea对象并设置了它的滚动条,在这个QScrollArea中,我们添加了一个QWidget,并在QWidget中添加了100个QLabel标签。
接着,我们将QWidget对象设置为QScrollArea的“可滚动区域的窗口小部件(setWidget)”。最后,我们创建了一个QVBoxLayout,并将我们的QScrollArea添加至其内部,最终将QVBoxLayout设置为QWidget对象的布局,然后运行我们的QWidget对象。
在这样的设置下,QWidget将被转换为QScrollArea的可滚动区域,所以当QWidget中的内容超过一定程度时,QScrollArea的滚动条会自动出现,以便用户查看所有内容。
2. 添加滑动条和滑块样式
在上面的示例中,我们当然能够看到一个可滚动的标签,但是它的样式非常简单。我们也可以自定义它的样式。下面是一个添加样式的示例:
import sys
from PyQt5.QtGui import QPalette, QPixmap
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QScrollArea
def main():
app = QApplication(sys.argv)
window = QWidget()
scroll_area = QScrollArea()
# 添加标签内容
widget = QWidget()
layout = QVBoxLayout(widget)
for i in range(100):
label = QLabel(f'标签{i+1}')
layout.addWidget(label)
scroll_area.setWidget(widget)
# 设置滑动条风格
scroll_bar_stylesheet = 'QScrollBar:vertical {background-color: #F5F5F5; width: 12px; margin: 12px 12px 12px 0px;}'\
' QScrollBar::handle:vertical {background-color: #DBDBDB; border-radius: 6px;}'\
' QScrollBar::add-line:vertical {background: none;}'\
' QScrollBar::sub-line:vertical {background: none;}'\
' QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {background: none;}'
scroll_area.setStyleSheet(scroll_bar_stylesheet)
# 设置滑块风格
palette = scroll_area.palette()
pixmap = QPixmap(20, 20)
pixmap.fill(Qt.gray)
palette.setBrush(QPalette.Highlight, Qt.white)
palette.setBrush(QPalette.HighlightedText, Qt.black)
scroll_area.setPalette(palette)
vbox = QVBoxLayout()
vbox.addWidget(scroll_area)
window.setLayout(vbox)
window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
这次我们设置了滚动条的样式,这里我们采用了一些基本的CSS语法,这也是在PyQt中设置样式的常见方式。
另外,我们也可以设置滑块风格,通过设置QPalette颜色来实现。
这样,我们的可滚动标签就更加美观和实用了。