gpt4 book ai didi

python - 如何检测小部件是否在视线范围内? pyqt

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:50 25 4
gpt4 key购买 nike

我有一个QScrollArea,里面有很多小部件。

我找不到一种方法来检测滚动后哪些小部件在视野中。
有没有办法检测滚动后哪些小部件在视野中?

最佳答案

如果您想知道哪个小部件可见,请使用此函数:

def isVisibleWidget(widget):
if not widget.visibleRegion().isEmpty():
return True
return False

如果您只想检测滚动的移动,则必须使用以下生成的信号:

{your QScrollArea}.verticalScrollBar()
{your QScrollArea}.horizontalScrollBar()

在示例中使用valueChanged信号

示例:

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_())

enter image description here

输出:

['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13']

enter image description here

输出:

['6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19']

关于python - 如何检测小部件是否在视线范围内? pyqt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41844668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com