QAction.isChecked()始终为False,即使在初始化时已将其设置为True
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QAction.isChecked()始终为False,即使在初始化时已将其设置为True相关的知识,希望对你有一定的参考价值。
我有一个PyQt5应用程序,它的主窗口上有QDockWidgets,我有一个菜单,其中包含列出的这些dockwidget。每当我单击菜单项时,我都希望关闭或打开该小部件,具体取决于单击时是否选中了该菜单项。
我这样检查init的菜单项:
self.stream_action = QAction('Stream')
self.stream_action.setCheckable(True)
self.stream_action.setChecked(True)
self.stream_action.triggered.connect(self.show_hide_widget)
我对其余的人也一样,并且在GUI启动时看起来像这样:
因此,当我单击其中一个时,我们跳到show_hide_widget函数,看起来像这样:
def show_hide_widget(self):
widget_id = self.sender().text()
if self.sender().isChecked():
self.sender().setChecked(False)
if widget_id == 'Stream':
self.dock_stream.close()
else:
self.sender().setChecked(True)
if widget_id == 'Stream':
self.dock_stream.show()
但是self.sender()。isChecked()给我错误,这是为什么?
[可检查动作为triggered
时,其检查状态也被切换。
注释该功能,尝试再次触发该动作,您会看到:第一次看到该动作时,它会被选中,但是通过单击它,您还会切换其状态(即使您没有查看结果,因为它立即消失了)。再次打开菜单,您将取消选中该操作,再次触发它,您的功能将按您预期的方式工作。
这显然意味着您不应该在show_hide_widget
功能中设置动作的检查状态。
此外,请考虑实现触发的checked
参数,这比调用self.sender()
更好。
def show_hide_widget(self, state):
print(state)
以上是关于QAction.isChecked()始终为False,即使在初始化时已将其设置为True的主要内容,如果未能解决你的问题,请参考以下文章
stm32f103的 RT-Thread3.1.3移植SFUD+FAL+EasyFlash
stm32f103的 RT-Thread3.1.3移植SFUD+FAL+EasyFlash
stm32f103的 RT-Thread3.1.3移植SFUD+FAL+EasyFlash
TYPO3 Fluidcontent:如何在对象内使用 FAL
如何使用contextId使用'CLASS_NAME'查找'找到'android.widget.TextView':''multiple:fal