连接PySide中的QTableView信号,参数错误?

连接PySide中的QTableView信号,参数错误?,qt,signals,pyside,slot,Qt,Signals,Pyside,Slot,我有一个创建窗口和树视图的类。创建treeview的代码非常简单,它位于init方法中: tableView = QTableView() tableView.setModel(model) tableView.clicked.connect(self.foo) 其中'foo'是应接受回调的函数(同一类的成员)的名称。该函数的签名如下: def foo(something): print something 据我所知(“something”参数应该是Q

我有一个创建窗口和树视图的类。创建treeview的代码非常简单,它位于init方法中:

    tableView = QTableView()
    tableView.setModel(model)
    tableView.clicked.connect(self.foo)  
其中'foo'是应接受回调的函数(同一类的成员)的名称。该函数的签名如下:

def foo(something):
    print something  
据我所知(“something”参数应该是QModelIndex的一个实例,但事实并非如此。对变量进行打印(something)表明我已将foo(…)发送给window类。我错过了什么?我认为这是正确的方法,基于:

有什么想法吗?

谢谢您的帮助。

方法的第一个参数是隐式传递的实例本身,通常命名为
self
。在您的版本中,
something
将成为实例,而不是传递的参数。您的方法应该如下所示:

def foo(self, something):
    print something
作为旁注,通常在将参数传递给不接受任何参数的方法时会出现错误。比如:

class Foo(object):
    def bar(something):
        print something

f = Foo()
f.bar(1)

#Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
#TypeError: bar() takes exactly 1 argument (2 given)
类Foo(对象):
def bar(某物):
打印一些东西
f=Foo()
f、 酒吧(1)
#回溯(最近一次呼叫最后一次):
#文件“”,第1行,在
#TypeError:bar()正好接受1个参数(给定2个)

但在Qt中,您可以将信号连接到接受较少参数的插槽。Qt将调用没有该参数的插槽。因此,尽管单击的
信号传递
QModelIndex
,但您仍然可以将此信号连接到不接受参数的方法(如
foo
)。结果,您将得到这个无声的“bug”。

忘记了
本身了吗?(例如,
def foo(self,something):
)是的,就是这样。谢谢@Avaris你能添加这个评论作为答案,这样这个问题就可以结束了吗?所以,我想在Python中,你应该了解你自己。。。我会送出去的。再次感谢你的建议!