2017-06-01 70 views
0

我是Python和pyQt的新手。我有一个QDialog的类,并在init中传递一个字符串列表给这个类;pyQt,列表传递给类初始化

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() 

该列表在班级中无法访问。任何人都知道我在做什么错了?谢谢

回答

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。我认为它更加明确和安全(一般来说)。

无论如何尝试这些修改,看看它是否能解决问题。

+0

是的 - 非常感谢您的帮助! –