将PyQt4 QAction的triggered()与本地类可调用对象绑定似乎不起作用。如何调试?
我创建这个对象是为了生成一个 QAction(动作)。然后我把这个 QAction 加入到一个菜单里:
class ActionObject(object):
def __init__(self, owner, command):
action = QtGui.QAction(command.name, owner)
self.action = action
self.command = command
action.setShortcut(command.shortcut)
action.setStatusTip(command.name)
QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), self.triggered)
def triggered(self):
print("got triggered " + self.command.id + " " + repr(checked))
可惜的是,当我选择这个菜单项时,'triggered'(触发)这个函数并没有被调用。虽然 QtCore.QObject.connect() 返回了 True,表示连接成功。
但是控制台上没有任何信息显示出有什么问题,也没有抛出异常。
我该怎么调试这个问题呢?(或者说,我哪里做错了?)
4 个回答
0
看起来你需要在你没有提供的两个类中进行调试;也就是你在这些类中添加属性,然后把它们作为参数传递给ActionObject。
我创建了一个没有这些类的示例,因为我不知道你另外两个类的样子。至于第三个父类,我不需要,因为它当然可以是任何继承了QWidget/QMainWindow/QDialog等的通用类。
class ActionObject(object):
def __init__(self, owner=None, command=None):
self.menuBar = QtGui.QMenuBar(self)
self.setMenuBar(self.menuBar)
# Make sure the menu item's parent is the menu
self.menuGeneric = QtGui.QMenu(self.menuBar)
self.menuGeneric.setTitle('&Generic')
# Create and add the action in one line
self.menuBar.addAction(self.menuGeneric.menuAction())
QtCore.QObject.connect(self.menuGeneric, qc.SIGNAL('triggered()'), self.triggered)
def triggered(self):
print "got triggered"
0
我在你的代码中没有看到你把 action
加到任何菜单里(实际上我哪里都没看到 addAction
的调用),而且在你的 triggered
方法里有一个奇怪的变量 checked
,它在任何地方都没有定义(它是全局变量在别的地方定义的吗?)。这两个问题都表明你可能还有其他代码没有展示出来(那段代码负责把这个动作加到某个菜单或工具栏上,并定义了全局变量 checked
——或者你在 def triggered
语句中漏掉了某个参数?),这些地方可能就是出错的地方(这段代码只是一个可能正确程序的 子集……但显然缺少了一些部分,我们怎么知道 它们 是正确的呢?)。
1
可能有点晚了,但我也遇到过同样的问题,我是通过把:class ActionObject(object)
改成 class ActionObject()
来解决的。