Wenn Sie möchten wissen, welche Widget sichtbar Nutzung dieser Funktion:
def isVisibleWidget(widget):
if not widget.visibleRegion().isEmpty():
return True
return False
Wenn Sie nur die Bewegung der Scroll erfassen möchten, dass Sie die Signale, die von erzeugt verwenden müssen:
{your QScrollArea}.verticalScrollBar()
{your QScrollArea}.horizontalScrollBar()
In das Beispiel verwenden, um das Signal valueChanged
Beispiel:
import sys
from PyQt5.QtWidgets import QApplication, QPushButton, QScrollArea, QVBoxLayout, QWidget
class Widget(QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent=parent)
widget = QWidget()
layout = QVBoxLayout(self)
self.buttons = []
for i in range(20):
btn = QPushButton(str(i))
self.buttons.append(btn)
layout.addWidget(btn)
widget.setLayout(layout)
scroll = QScrollArea()
scroll.setWidget(widget)
vLayout = QVBoxLayout(self)
vLayout.addWidget(scroll)
self.setLayout(vLayout)
scroll.verticalScrollBar().valueChanged.connect(self.slot)
scroll.horizontalScrollBar().valueChanged.connect(self.slot)
self.show()
self.slot()
def slot(self):
visibles = []
for btn in self.buttons:
if self.isVisibleWidget(btn):
visibles.append(btn.text())
print(visibles)
def isVisibleWidget(self, widget):
if not widget.visibleRegion().isEmpty():
return True
return False
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Widget()
sys.exit(app.exec_())
Ausgang:
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13']
Ausgang:
['6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19']
Nicht vertraut mit Python, aber ich würde die aktuellen X- und Y-Positionen der Check Scrollbalken und berechnen Sie, welcher Bereich abgedeckt ist Verwenden Sie diese Werte. Danach können Sie in diesem Bereich prüfen, ob eine Komponente darin enthalten ist oder nicht. Möglicherweise zu viel, um das zu tun, aber so würde ich es vielleicht machen – geisterfurz007