文章目录
一、QAbstractScrollArea 简介
QAbstractScrollArea 是一个滚动区域的类,合适显示内容较多的控件,通过滚动来显示不同的内容。其继承自QFrame
,由于是一个虚拟的类,不能被直接实例化,所以可以使用其子类QTextEidt
来测试它的一些功能函数。主要有设置水平或垂直的滚动条及其策略,角落控制等功能。
二、QAbstractScrollArea 的使用
创建一个QTextEdit
:
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
w.setWindowTitle("QAbstractScrollArea")
w.resize(300, 300)
te = QTextEdit(w)
w.show()
if __name__ == '__main__':
sys.exit(app.exec_())
运行:
这里创建了一个多行的文本框,作为滚动控件,但是它并没有显示滚动条,这是由于默认的滚动条策略为:当文本内容较多,无法被完全显示时,才出现滚动条。而且,这里是不会出现水平滚动条的,因为当水平方向达到控件宽度时,将自动换行:
三、QAbstractScrollArea 常用功能(API)
1. 设置滚动条测试
API | 含义 |
---|---|
setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy) | 设置水平滚动条策略 |
setVerticalScrollBarPolicy(Qt.ScrollBarPolicy) | 设置垂直滚动条策略 |
其策略为一个枚举值:
策略 | 含义 |
---|---|
Qt.ScrollBarAsNeeded | 必要时显示(文本内容超过控件大小时 ) |
Qt.ScrollBarAlwaysOff | 一直显示 |
Qt.ScrollBarAlwaysOn | 一直不显示 |
示例:设置滚动条一直显示:
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
w.setWindowTitle("QAbstractScrollArea")
w.resize(300, 300)
te = QTextEdit(w)
te.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
w.show()
if __name__ == '__main__':
sys.exit(app.exec_())
运行:
2. 角落控件
API | 含义 |
---|---|
setCornerWidget(QWidget *widget) | 在角落设置一个控件 |
QAbstractScrollArea 可以设置一个角落控件:
图中,红圈部分为角落控件的位置,即在红圈处,是可以添加一个控件的:
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
w.setWindowTitle("QAbstractScrollArea")
w.resize(300, 300)
te = QTextEdit(w)
te.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
te.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
btn = QPushButton(w)
btn.setIcon(QIcon("powerBtn"))
te.setCornerWidget(btn)
w.show()
if __name__ == '__main__':
sys.exit(app.exec_())
运行:
这个按键就是一个QPushButton
,这里的水平滚动策略是无效了,只是为了突出角落,注意到,即使不设置水平滚动条,这个角落控件仍然功能仍然是存在的:
3. 自定义滚动条
相关 API | 含义 |
---|---|
setHorizontalScrollBar(QScrollBar * scrollBar) | 设置水平滚动条 |
setVerticalScrollBar(QScrollBar * scrollBar) | 设置垂直滚动条 |
通过以上函数可以自定义滚动条,但是需要设置scrollBar
控件,后续再作介绍。