pyQt,列表传递给类init

时间:2017-06-01 09:16:11

标签: python-3.x pyqt5

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

该课程无法访问该列表。谁知道我做错了什么?感谢

1 个答案:

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

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