我是Python和pyQt的新手。我有一个QDialog的类,我在init中将一个字符串列表传递给这个类;
class Remove_Source(QtWidgets.QDialog, Ui_R_Source):
def __init__(self, items=None):
super(Remove_Source , self).__init__()
self.ui = Ui_R_Source()
self.ui.setupUi(self)
self.setWindowTitle("Remove Source Folders")
self.items = items or []
for i in range(self.items.count()):
self.ui.keep_window.addItem(self.items(i))
self.exec()
该课程无法访问该列表。谁知道我做错了什么?感谢
答案 0 :(得分:1)
您的语法有一些问题。您需要检查的一些要点:
1)count对于Python列表具有与对QList不同的含义。 python列表的等价物是len(self.items)
(例如)。
2)indexation运算符(如在C ++中)是[]
。 ()
将是call操作(就像在函数及其参数中一样)。在您的代码中,这意味着将self.items(i)
更改为self.items[i]
。
class Remove_Source(QtWidgets.QDialog, Ui_R_Source):
def __init__(self, items=[]): # changed here
super(Remove_Source , self).__init__()
self.ui = Ui_R_Source()
self.ui.setupUi(self)
self.setWindowTitle("Remove Source Folders")
self.items = items
for i in range(len(self.items)): # changed here
self.ui.keep_window.addItem(self.items[i]) # changed here
self.exec()
作为最后一点,尽管没有效果,但使用logical operators提供值可能会让您最终遇到麻烦。在您的案例items or []
中,您假设items
具有真值。如果你知道发生了什么,这是好的,否则它可能是危险的。在代码中,我将默认值作为空列表[]
,并执行了正常的归因操作self.items = items
。我认为它更明确和安全(一般来说)。
无论如何,请尝试这些修改并查看它是否能解决问题。