访问复合 QWidget

问题描述 投票:0回答:1

我的代码创建了一个复合小部件,它由一个按钮和一个标签组成。
它是更广泛代码的一部分,其中该复合小部件是列表的元素。
但现在让我们关注我的问题:
如何在运行时了解 QPushButton 中的文本? 这是代码:

myList = QListWidget(layout)    
...
#this happens within a loop inside a method of the class  

item = QtWidgets.QListWidgetItem()
item_widget = QtWidgets.QWidget()  
line_push_button = QtWidgets.QPushButton("text I want to get")
line_push_button.clicked.connect(self.clicked)
line_text = QtWidgets.QLabel("some text")
  
item_layout = QtWidgets.QHBoxLayout()
item_layout.addWidget(line_push_button)
item_layout.addWidget(line_text)
        
item_widget.setLayout(item_layout)  
myList.insertItem(i, item)
myList.setItemWidget(item, item_widget)  

在运行时我可以访问

myList
,然后我需要循环遍历列表中的项目,访问每个项目的按钮中的文本。
由于列表元素没有 findChild 或 findChildren 方法,我不知道该怎么办。
我不明白这种遍历在PyQT中是如何工作的

pyqt5
1个回答
0
投票

您可以使用 functools.partial 或带有可选参数的 lambda 在点击处理程序中捕获发件人

from PyQt5 import QtWidgets
import functools

if __name__ == "__main__":
    app = QtWidgets.QApplication([])

    parent = QtWidgets.QWidget()
    layout = QtWidgets.QVBoxLayout()

    def click_handler(sender):
        QtWidgets.QMessageBox.information(parent, "Clicked", sender.text())

    for text in ['one', 'two', 'three']:
        line_push_button = QtWidgets.QPushButton(text)
        # functools.partial
        line_push_button.clicked.connect(functools.partial(click_handler, sender=line_push_button))
        # lambda with optional argument
        # line_push_button.clicked.connect(lambda on, sender=line_push_button: click_handler(sender))
        layout.addWidget(line_push_button)

    parent.setLayout(layout)
    parent.show()

    app.exec()
© www.soinside.com 2019 - 2024. All rights reserved.