2013-04-28 97 views
1

我想激活从listWidget一个项目,那就是ChildWidget的一部分,在使用parentWidget事件过滤器。下面是相关parentWidget部分代码:PyQt的:激活QListWidget项目

self.w = ChildWidget() 
    def eventFilter(self, source, event): 
     if event.type() in (QtCore.QEvent.MouseButtonPress, 
         QtCore.QEvent.MouseButtonDblClick): 
     if event.button() == QtCore.Qt.LeftButton: 
       self.w.listWidget.itemActivated 

和ChildWidget:

self.listWidget.itemActivated.connect(self.klik) 
    if item.data(Qt.UserRole).toPyObject(): 
     mp3=item.data(Qt.UserRole).toPyObject() 
     playsnd("/home/pi/Desktop/komunikator/Recenice/pekara/"+mp3) 

事件过滤器工作正常,只是

self.w.listWidget.itemActivated 

不工作的命令。是否有其他方式激活项目和触发项目激活的信号发送?

回答

2
In [9]: q.itemActivated 
Out[9]: <bound signal itemActivated of QListWidget object at 0x1d13560> 

你不叫它。

但是,让我们尝试调用它。

In [10]: q.itemActivated() 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-10-3602f33f377a> in <module>() 
----> 1 q.itemActivated() 

TypeError: native Qt signal is not callable 

你不能调用它,你必须直接调用绑定过程。要发出信号,您必须使用发射。

q.itemActivated.emit(None) 
+0

好了,可以请你解释什么,应该怎么办?我试过self.w.listWidget.itemActivated.emit(无)。它发送信号,但函数klik没有收到参数“item”。我还去哪里? – speedyTeh 2013-04-28 21:41:02

+0

因为你写了“无”作为参数......把合适的人。 – LtWorf 2013-04-28 22:13:42

+0

我做到了!的行是:self.w.listWidget.itemActivated.emit(self.w.listWidget.currentItem()) – speedyTeh 2013-04-28 23:11:11