如何根据文件创建 QActions 及其信号
How create QActions and their signals according to file
我正在使用 python3 和 PyQt4。我想创建一个带有操作的菜单,其数量因数组而异。我希望他们每个人都将保存在数组中的相应信息保存到一个变量中。创建可变数量的事件似乎是不可能的。那么我如何根据激活它的动作来创建一个执行不同工作的事件呢?
那是我的代码:
def buildLoadSettings(self):
self.settings = array
for i in range(len(self.settings)):
exec("self.settings" + str(i) + " = QtGui.QAction('" + self.settings[i][0] + "', self)")
exec("self.loadMenu.addAction(self.settings" + str(i) + ")")
我想将每个动作与一个事件联系起来,最后将 "self.settings[i][1]" 保存到变量 "settings"。
抱歉我的新手问题。
尚不完全清楚您要实现的目标,但有几个 API 应该可以提供帮助。当然没有必要像现在这样使用难看的 exec
调用。
这里有一些想法:
使用QAction.setData()
将一些数据与每个动作相关联:
for item in self.settings:
action = QtWidgets.QAction(item[0], self)
action.setData(item[1])
self.loadMenu.addAction(action)
使用 QMenu.actions()
访问操作,而不是创建属性:
action = self.loadMenu.actions()[2]
print((action.text(), action.data()))
将插槽连接到 QMenu.triggered()
以在一个地方处理其所有操作:
self.loadMenu.triggered.connect(self.handleLoadMenu)
def handleLoadMenu(self, action):
# "action" is the action that was clicked
text = action.text()
data = action.data()
print('Action Clicked: ("%s", %s)' % (text, data))
PS:
如果您想 get/set 动态属性,请使用 getattr
和 setattr
:
# self.settings2 = action
setattr(self, "settings%s" % 2, action)
# action = self.settings2
action = getattr(self, "settings%s" % 2)
我正在使用 python3 和 PyQt4。我想创建一个带有操作的菜单,其数量因数组而异。我希望他们每个人都将保存在数组中的相应信息保存到一个变量中。创建可变数量的事件似乎是不可能的。那么我如何根据激活它的动作来创建一个执行不同工作的事件呢? 那是我的代码:
def buildLoadSettings(self):
self.settings = array
for i in range(len(self.settings)):
exec("self.settings" + str(i) + " = QtGui.QAction('" + self.settings[i][0] + "', self)")
exec("self.loadMenu.addAction(self.settings" + str(i) + ")")
我想将每个动作与一个事件联系起来,最后将 "self.settings[i][1]" 保存到变量 "settings"。 抱歉我的新手问题。
尚不完全清楚您要实现的目标,但有几个 API 应该可以提供帮助。当然没有必要像现在这样使用难看的 exec
调用。
这里有一些想法:
使用
QAction.setData()
将一些数据与每个动作相关联:for item in self.settings: action = QtWidgets.QAction(item[0], self) action.setData(item[1]) self.loadMenu.addAction(action)
使用
QMenu.actions()
访问操作,而不是创建属性:action = self.loadMenu.actions()[2] print((action.text(), action.data()))
将插槽连接到
QMenu.triggered()
以在一个地方处理其所有操作:self.loadMenu.triggered.connect(self.handleLoadMenu) def handleLoadMenu(self, action): # "action" is the action that was clicked text = action.text() data = action.data() print('Action Clicked: ("%s", %s)' % (text, data))
PS:
如果您想 get/set 动态属性,请使用 getattr
和 setattr
:
# self.settings2 = action
setattr(self, "settings%s" % 2, action)
# action = self.settings2
action = getattr(self, "settings%s" % 2)