如何使用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
需要使用QListWidgetItem
or或QString
(或Python
str
)。如果要传递Python list
,则必须使用for
循环来遍历数据:
myQListWidget = QListWidget()listsItem = ['my', 'data', 'are', 'here', '!']
for item in listsItem:
myQListWidget.addItem(item)
我发现的另一个问题是您的搜索数据是QLineEdit
s,在的任何重载方法中都不支持该类型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