Python 如何确定QScrollArea的子部件是否可见?
我正在Python 如何确定QScrollArea的子部件是否可见?,python,qt4,pyqt4,qscrollarea,Python,Qt4,Pyqt4,Qscrollarea,我正在QFrame上显示多个qlabel,放置在qscrollara中 我能够告诉QScrollArea使用QScrollArea.ensureWidgetVisible(QLabel)使任何QLabel可见,但我似乎找不到一种方法来确定子小部件当前是否可见。我希望类似于QScrollArea.isWidgetVisible(QWidget)的东西 我尝试使用孩子自己的方法,即QLabel.isVisible(),但无论QLabel在qscrollara中是否可见,它总是返回True(参见下面的
QFrame
上显示多个qlabel
,放置在qscrollara
中
我能够告诉
QScrollArea
使用QScrollArea.ensureWidgetVisible(QLabel)
使任何QLabel可见,但我似乎找不到一种方法来确定子小部件当前是否可见。我希望类似于QScrollArea.isWidgetVisible(QWidget)
的东西
我尝试使用孩子自己的方法,即QLabel.isVisible()
,但无论QLabel
在qscrollara
中是否可见,它总是返回True
(参见下面的示例)。解决这个问题的办法是什么
#!/usr/bin/env python
import sys
from PyQt4 import QtGui, QtCore
application = QtGui.QApplication(sys.argv)
class Area(QtGui.QScrollArea):
def __init__(self, child):
super(Area, self).__init__()
self.child = child
self.setWidget(self.child)
self.setFixedSize(100, 100)
class MainWidget(QtGui.QFrame):
def __init__(self, parent=None):
QtGui.QFrame.__init__(self, parent)
self.layout = QtGui.QVBoxLayout()
n = 1
while n != 10:
label = QtGui.QLabel('<h1>'+str(n)+'</h1>')
self.layout.addWidget(label)
n += 1
self.setLayout(self.layout)
def wheelEvent(self, event):
print "Wheel Event:"
for child in self.children()[1:]:
print child.isVisible()
event.ignore()
mainwidget = MainWidget()
area = Area(mainwidget)
area.show()
application.exec_()
#/usr/bin/env python
导入系统
从PyQt4导入QtGui、QtCore
application=QtGui.QApplication(sys.argv)
班级面积(QtGui.QScrollArea):
定义初始化(自,子):
超级(区域,自我)。\uuuu初始化
self.child=child
self.setWidget(self.child)
自我设置固定大小(100100)
类MainWidget(QtGui.QFrame):
def uuu init uuu(self,parent=None):
QtGui.QFrame.\uuuuu init\uuuuu(self,parent)
self.layout=QtGui.QVBoxLayout()
n=1
而n!=10:
label=QtGui.QLabel(“”+str(n)+“”)
self.layout.addWidget(标签)
n+=1
self.setLayout(self.layout)
def wheelEvent(自我,事件):
打印“控制盘事件:”
对于self中的child.children()[1:]:
打印child.isVisible()
event.ignore()
mainwidget=mainwidget()
面积=面积(mainwidget)
area.show()
application.exec()
就可以了
您可以使用qscrolrea::childAt(int x,int y).isvisible()
检查小部件的可见性。可以
您可以使用qscrolrea::childAt(int x,int y).isVisible()
来检查小部件的可见性。isVisible
与您想要做的不同。它告诉小部件是否隐藏。即使它不在视口中,小部件也可见,除非您隐藏它
您可以使用visibleRegion
。应该发生绘制事件的是小部件的区域。如果标签位于视口之外,则其区域应为空区域
def wheelEvent(self, event):
print "Wheel Event:"
for child in self.children()[1:]:
print child.text(), 'is visible?', not child.visibleRegion().isEmpty()
event.ignore()
isVisible
与您想要执行的操作不同。它告诉小部件是否隐藏。即使它不在视口中,小部件也可见,除非您隐藏它
您可以使用visibleRegion
。应该发生绘制事件的是小部件的区域。如果标签位于视口之外,则其区域应为空区域
def wheelEvent(self, event):
print "Wheel Event:"
for child in self.children()[1:]:
print child.text(), 'is visible?', not child.visibleRegion().isEmpty()
event.ignore()
QScrollArea.ensureWidgetVisible只会移动小部件使其可见。它不会告诉我小部件一开始是否可见。QScrollArea.childAt仅返回给定位置的小部件,然后QWidget.isVisible应返回小部件是否可见。这与我在上面的代码中所做的没有什么不同,我返回了所有子窗口小部件,但它不起作用,因为它为所有窗口小部件返回True,即使它们在QScrollArea.QScrollArea.ensureWidgetVisible中不可见,它只会移动窗口小部件使其可见。它不会告诉我小部件一开始是否可见。QScrollArea.childAt仅返回给定位置的小部件,然后QWidget.isVisible应返回小部件是否可见。这与我在上面的代码中所做的没有什么不同,我在代码中返回了所有子窗口小部件,但它不起作用,因为它为所有窗口小部件返回True,即使它们在qscrollara中不可见。