信号 QscrollArea
Signal QscrollArea
我想知道每次 window 调整大小时是否可以有一个信号或其他信息来知道滚动条何时可用以及何时不再可用?
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class Widget(QWidget):
def __init__(self, parent= None):
super(Widget, self).__init__()
widget = QWidget()
layout = QVBoxLayout(self)
for _ in range(10):
btn = QPushButton()
layout.addWidget(btn)
widget.setLayout(layout)
scroll = QScrollArea()
scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
scroll.setWidget(widget)
vLayout = QVBoxLayout(self)
vLayout.addWidget(scroll)
self.setLayout(vLayout)
if __name__ == '__main__':
app = QApplication(sys.argv)
dialog = Widget()
dialog.show()
app.exec_()
由于 QScrollBar 通常仅在其范围最大值大于 0 时才可见,因此您可以只检查该值。
class Widget(QWidget):
def __init__(self, parent= None):
# ....
# note that the scroll area is now an instance member
self.scroll = QScrollArea()
self.scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
self.scroll.setWidget(widget)
self.scroll.verticalScrollBar().rangeChanged.connect(self.checkScrollBarRange)
vLayout = QVBoxLayout(self)
vLayout.addWidget(self.scroll)
self.setLayout(vLayout)
# the next is important when resizing the widget containing the scroll area
self.scroll.installEventFilter(self)
def eventFilter(self, source, event):
if source == self.scroll and event.type() == QEvent.Resize:
self.checkScrollBarRange()
return super().eventFilter(source, event)
def checkScrollBarRange(self):
if (self.scroll.verticalScrollBarPolicy() != Qt.ScrollBarAlwaysOff and
self.scroll.verticalScrollBar().maximum()):
print('vertical scroll bar IS visible')
else:
print('vertical scroll bar NOT visible')
我想知道每次 window 调整大小时是否可以有一个信号或其他信息来知道滚动条何时可用以及何时不再可用?
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class Widget(QWidget):
def __init__(self, parent= None):
super(Widget, self).__init__()
widget = QWidget()
layout = QVBoxLayout(self)
for _ in range(10):
btn = QPushButton()
layout.addWidget(btn)
widget.setLayout(layout)
scroll = QScrollArea()
scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
scroll.setWidget(widget)
vLayout = QVBoxLayout(self)
vLayout.addWidget(scroll)
self.setLayout(vLayout)
if __name__ == '__main__':
app = QApplication(sys.argv)
dialog = Widget()
dialog.show()
app.exec_()
由于 QScrollBar 通常仅在其范围最大值大于 0 时才可见,因此您可以只检查该值。
class Widget(QWidget):
def __init__(self, parent= None):
# ....
# note that the scroll area is now an instance member
self.scroll = QScrollArea()
self.scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
self.scroll.setWidget(widget)
self.scroll.verticalScrollBar().rangeChanged.connect(self.checkScrollBarRange)
vLayout = QVBoxLayout(self)
vLayout.addWidget(self.scroll)
self.setLayout(vLayout)
# the next is important when resizing the widget containing the scroll area
self.scroll.installEventFilter(self)
def eventFilter(self, source, event):
if source == self.scroll and event.type() == QEvent.Resize:
self.checkScrollBarRange()
return super().eventFilter(source, event)
def checkScrollBarRange(self):
if (self.scroll.verticalScrollBarPolicy() != Qt.ScrollBarAlwaysOff and
self.scroll.verticalScrollBar().maximum()):
print('vertical scroll bar IS visible')
else:
print('vertical scroll bar NOT visible')