Skip to main content
 首页 » 编程设计

python之如何使用 findChildren

2025年05月04日16lhb25

我想单击一个按钮并清除大约 20 个 QLineEdits。

我正在尝试使用 findChildren() 并将所有 QLineEdit 放入 QListWidget

self.StudentAdmissionLayout = QGridLayout() 
self.StudentAdmissionLayout.addWidget(self.StudentName,1,0,1,1) 

self.StudentAdmissionLayout 布局上放置了所有 QLineEdit。

self.myList = QListWidget() 
self.Item = QListWidgetItem() 
self.Item = self.StudentAdmissionLayout.findChildren(QLineEdit) 
self.myList.addItem(self.Item) 

我遇到以下错误:

TypeError: arguments did not match any overloaded call: 
QListWidget.addItem(QListWidgetItem): argument 1 has unexpected type 'list' 
QListWidget.addItem(QString): argument 1 has unexpected type 'list' 

我试图将以上 4 行放在一个循环中。但是第三行不工作,我不确定如何让它工作。 请提出建议。

请您参考如下方法:

好的,我们必须了解 list-of-QObject QObject.findChildren (self, type type, QString name = QString()) 的行为。此类的文档说

Returns all children of this object with the given name that can be cast to type T, or an empty list if there are no such objects. Omitting the name argument causes all object names to be matched. The search is performed recursively.

来源:http://pyqt.sourceforge.net/Docs/PyQt4/qobject.html#findChildren

然后,它返回一个 Python list 给你,列表中的每个元素都是 T 类型(你作为输入提供的类型)。所以你的问题:

TypeError: arguments did not match any overloaded call: 
QListWidget.addItem(QListWidgetItem): argument 1 has unexpected type 'list' 
QListWidget.addItem(QString): argument 1 has unexpected type 'list' 

是因为你传递了一个列表,但是addItem需要一个QListWidgetItem或者QString(或者Python str) .如果要传递 Python list,则必须使用 for 循环来遍历数据:

myQListWidget = QListWidget() 
listsItem = ['my', 'data', 'are', 'here', '!'] 
for item in listsItem: 
    myQListWidget.addItem(item) 

我发现的另一个问题是你的搜索数据是QLineEdit,它不是QListWidget.addItem()的任何重载方法中支持的类型。我认为你不能将它传递给这个方法。但是如果你只需要每个 QLineEdit 中的“文本”,你可以像这样转换它:

self.studentAdmissionQGridLayout = QGridLayout() 
. 
. 
. 
self.myQListWidget = QListWidget() 
listsMyQLineEdit = self.studentAdmissionQGridLayout.findChildren(QLineEdit) 
for myQLineEdit in listsMyQLineEdit: 
    self.myQListWidget.addItem(myQLineEdit.text()) 

这是一个有助于理解QListWidget.addItem()的引用:

http://pyqt.sourceforge.net/Docs/PyQt4/qlistwidget.html#addItem