我将一个列表传递给构造函数,但是python将这些视为单独的参数:
def __init__(self, a_parent, a_items):
super.__init__(self, a_parent)
self._parent = a_parent
self._layout = QHBoxLayout()
self._combo = QComboBox()
for item in a_items:
self._combo.addItem(item)
self._layout.addWidget(self._combo)
self.setLayout(self._layout)
self.setWindowModality(Qt.WindowModal)
self.setWindowTitle("Select Review Topic")
self.setGeometry(300, 300, 300, 50)
self._combo.currentIndexChanged.connect(self.index_changed)
和电话:
def select_topic(self):
topics = ['one', 'two', 'three']
self.topic_selection_window = SelectTopic(self, self.centralWidget(), topics)
self.topic_selection_window.show()
返回错误:
TypeError: __init__() takes 3 positional arguments but 4 were given
对于我的生活,我看不到它!
答案 0 :(得分:0)
这一行错了:
self.topic_selection_window = SelectTopic(self, self.centralWidget(), topics)
那个附加论点的来源。您已将self
传递给SelectTopic.__init__()
。您不必这样做,因为该方法将隐含地传递给self
下的值。
为了澄清,这些是__init__()
从您的电话中获得的值:
SelectTopic
self
下传递给它的对象self.centralWidget()
topics
这就是为什么它抱怨得到4个参数而不是3个。
我们正在谈论的界限应该是这样的:
self.topic_selection_window = SelectTopic(self.centralWidget(), topics)
如果您想更多地了解self
的工作原理,this article is a great start。