我需要知道我在动态生成的菜单系统中单击了什么项目。我只想知道我点击了什么,即使它只是一个字符串表示。
def populateShotInfoMenus(self):
self.menuFilms = QMenu()
films = self.getList()
for film in films:
menuItem_Film = self.menuFilms.addAction(film)
self.connect(menuItem_Film, SIGNAL('triggered()'), self.onFilmSet)
self.menuFilms.addAction(menuItem_Film)
def onFilmRightClick(self, value):
self.menuFilms.exec_(self.group1_inputFilm.mapToGlobal(value))
def onFilmSet(self, value):
print 'Menu Clicked ', value
与其直接使用
onFilmSet
作为连接的接收器,不如使用lambda函数,以便可以传递其他参数:我试图找出一个类似的问题,在看了上面的代码后,这就是我的工作。我觉得一起展示会更好。=)
看看Qt的属性系统。可以动态添加包含字符串或任何您想要的内容的属性,该属性定义操作。然后可以在插槽中使用sender()方法获取调用插槽的QObject。然后,查询您设置的属性,并根据需要执行任何操作。
但是,这不是最好的方法。不建议使用sender(),因为它违反了面向对象的模块化原则。
最好的方法是使用QSignalMapper类。此类将不同对象的信号映射到具有不同参数的同一时隙。
我没有使用PyQt,因此我不能给出确切的语法或示例,但通过一点研究应该不难找到。
相关问题 更多 >
编程相关推荐