繁体   English   中英

如何访问 QWidget 中的 QPushButton object?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM