PyQt与QSignalMapper/lambda - 多个信号,单个插槽
我在PyQt中有一个菜单,上面有一系列的操作,每个操作对应我想显示的不同内容。比如说,点击Y就会显示Y的内容,点击Z就显示Z的内容,等等。(这是一个用来阅读网络漫画的程序。)
我把这些操作都放在菜单上,但我觉得手动一个一个输入有点麻烦;我想找一种自动化的方法,这样就不用每次都打出来。比如说,写一个函数,把这些操作放到一个字典里,然后把它们和一个信号连接到同一个槽函数上。
不过,我希望这个槽函数,比如叫Foo,可以接收一个参数,这样就能知道用户点击了哪个操作。如果点击的是X,那么就传递X,点击Y就传递Y,依此类推。
我查了一下,有个问题提到可以用lambda,但我觉得那样不太对劲。
还有一种方法是用QSignalMapper。我试着找这个的用法,但没找到相关的例子。
有没有人能帮帮我?
谢谢!
1 个回答
5
你可以使用 functools.partial
(链接 查看文档):
import functools
...
# note that these are the 'new style' slot connections (not necessarily needed)
self.menu_entry_x.triggered.connect(functools.partial(myfunc, x))
self.menu_entry_y.triggered.connect(functools.partial(myfunc, y))
上面的例子很简单,但如果你有更多问题,我可以详细解释。