如何使用findChildren?

我想单击一个按钮并清除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())。该课程的文档说

返回具有给定名称的该对象的所有子代,可以转换为T类型;如果没有此类对象,则返回一个空列表。省略name参数会使所有对象名称匹配。搜索是递归执行的。

:http :

//pyqt.sourceforge.net/Docs/PyQt4/qobject.html#findChildren

然后,它list向您返回一个Python ,并且列表中的每个元素都是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需要使用QListWidgetItemor或QString(或Python

str)。如果要传递Python list,则必须使用for循环来遍历数据:

myQListWidget = QListWidget()

listsItem = ['my', 'data', 'are', 'here', '!']

for item in listsItem:

myQListWidget.addItem(item)

我发现的另一个问题是您的搜索数据是QLineEdits,在的任何重载方法中都不支持该类型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

以上是 如何使用findChildren? 的全部内容, 来源链接: utcz.com/qa/412946.html

回到顶部