2013-01-11 32 views
2

我有一个创建窗口和树视图的类。创建树视图中的代码非常简单,就是在INIT方法:在PySide中连接QTableView信号,参数错误?

tableView = QTableView() 
    tableView.setModel(model) 
    tableView.clicked.connect(self.foo) 

如果“富”是应该接受回调函数(同一类的成员)的名称。该函数的签名如下:

def foo(something): 
    print something 

从什么(诚然小)我明白了,“东西”参数应该已经QModelIndex的实例,但事实并非如此。对变量做一个打印(东西)表明我发送了foo(...)窗口类。我在这里错过了什么?我以为这是应该做的正确方法,基于:

http://qt-project.org/wiki/Signals_and_Slots_in_PySide

任何想法?
谢谢你的帮助。

+0

忘了'自我'? (即'def foo(self,something):') – Avaris

+0

是的,就是这样。谢谢! – easythrees

+0

@Avaris你可以添加评论作为答案,这样可以关闭这个问题吗? – tacaswell

回答

1

方法的第一个参数是隐式传递的实例本身,通常命名为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) 

但在Qt中,您可以将信号连接到接受较少参数的插槽。 Qt将调用没有该参数的插槽。因此,尽管clicked信号通过了QModelIndex,但您仍然可以将此信号连接到不接受参数的方法(如foo)。结果,你会得到这个沉默的'错误'。

+0

所以,我想在Python中,你应该知道你的自我...我会看到自己。再次感谢你提供的建议! – easythrees