[英]How to access a QPushButton object inside a QWidget?
例如在下面的代码中:
>>> from PyQt5.QtWidgets import *
>>> import sys
>>> app = QApplication(sys.argv)
>>> widget = QWidget()
>>> layout = QVBoxLayout()
>>> push_button = QPushButton("Hello")
>>> layout.addWidget(push_button)
>>> widget.setLayout(layout)
>>> push_button
<PyQt5.QtWidgets.QPushButton object at 0x7f52d2427700>
>>>
我想从小部件 object 访问<PyQt5.QtWidgets.QPushButton object at 0x7f52d2427700>
。这可能吗?
将小部件添加到布局时,它们将自动重新设置为随后包含该布局的小部件的父级。 这意味着您可以使用findChild获取对给定根小部件下的对象树中任何子项的引用。 如果您为目标 object 命名,则效果最佳:
>>> push_button.setObjectName('btn_hello')
>>> widget.findChild(QPushButton, 'btn_hello').text()
'Hello'
如果目标 object 没有名字, findChildren也可以用来搜索相同类型的后代对象:
>>> for button in widget.findChildren(QPushButton):
... if button.text() == 'Hello':
... print(button)
... break
...
<PyQt5.QtWidgets.QPushButton object at 0x7fa0e089bb50>
默认情况下,查找方法递归搜索,但也可以将搜索限制为仅直接子项(返回的列表按照子项添加到父项的顺序):
>>> for text in 'One Two Three'.split():
... layout.addWidget(QPushButton(text))
...
>>> widget.findChildren(QPushButton, options=Qt.FindDirectChildrenOnly)[1].text()
'One'
要搜索不同类型的子对象,可以使用类型元组:
>>> for text in 'Red Blue Green'.split():
... layout.addWidget(QLabel(text))
...
>>> widget.findChildren((QLabel, QPushButton))[4].text()
'Red'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.