更改 QAction 的名称而不重新创建它

Changing a name of a QAction without recreating it

提问人:Mila 提问时间:11/9/2023 最后编辑:Mila 更新时间:11/9/2023 访问量:37

问:

我目前正在尝试使用 PyQt5 实现一个 grafic 编辑器应用程序,并致力于颜色空间之间的转换。在我的应用程序中,有一个 menuBar,其中包含用于选择要显示的频道的菜单。我在 init() 函数中以这种方式创建它:

self.menubar = self.menuBar()
self.channel_menu = self.menubar.addMenu('&Channels')

self.first_channel_action = QAction('&Red', self)
self.second_channel_action = QAction('&Green', self)
self.third_channel_action = QAction('&Blue', self)
self.all_channel_action = QAction('&All channels', self)

self.channel_menu.addAction(self.first_channel_action)
self.channel_menu.addAction(self.second_channel_action)
self.channel_menu.addAction(self.third_channel_action)
self.channel_menu.addAction(self.all_channel_action)

在不同的色彩空间中,这些通道有不同的名称,因此,当色彩空间发生变化时,我需要能够更改它们。

我想出的唯一解决方案是从菜单中删除每个操作,然后使用不同的名称重新创建它。例如,对于 HSL 色彩空间,我创建了 ,并将它们添加到self.channel_menu。self.channel_menu.removeAction(..)self.channel_menu.addAction(..)QAction('&Hue', self)QAction('&Saturation', self)QAction('&Lightness', self)

我想知道是否有办法在不删除和重新创建 QAction 的情况下更改 QAction 名称。

pyqt5 桌面应用程序

评论

0赞 musicamante 11/9/2023
action.setText()
0赞 musicamante 11/10/2023
请注意,从菜单中删除操作不会删除它们,最终可能会导致内存泄漏;QActions 的内存占用量相对较小,因此对于现代计算机来说,数百甚至数千个“孤立”操作的影响可以忽略不计,但无论如何都应该避免。如果删除某个操作并且该操作应被销毁,请使用 ;请注意,如果操作具有父级(这是您的情况,因为您创建了作为父级的操作),则尝试通过覆盖/删除 Python 引用来执行此操作可能还不够。action.deleteLater()self

答: 暂无答案