我想要一个行为稍有改变的QAction。我希望QAction在检查时只发出一个信号,而且我希望它的复选框始终可检查,即使QAction已被禁用。例如,如果将QAction设置为setEnabled(False),则无法单击QAction或选中/取消选中它。我喜欢它不再被点击,但不喜欢我无法切换QAction中的复选框。是否有可能修改它以获得我在找的东西?PyQt - 即使它被禁用,也可以使QAction可检查
我在下面附加了一个示例文件。目标是使QAction设置为禁用(setEnabled(False))的一些解决方案,但用户仍然可以选中/取消选中它。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''An example file with a QAction that stays checkable.'''
# IMPORT STANDARD LIBRARIES
import sys
# IMPORT THIRD-PARTY LIBRARIES
from Qt import QtWidgets
from Qt import QtCore
class AlwaysOpenAction(QtWidgets.QAction):
def __init__(self, *args, **kwargs):
super(AlwaysOpenAction, self).__init__(*args, **kwargs)
self.toggled.connect(self.printout)
def printout(self):
if self.isChecked():
print('Checkbox was checked')
class WindowTest(QtWidgets.QWidget):
'''A basic window.'''
def __init__(self, parent=None):
'''Init the window.'''
super(WindowTest, self).__init__(parent=parent)
self.setLayout(QtWidgets.QHBoxLayout())
self.menubar = QtWidgets.QMenuBar(parent=self)
self.menu = self.menubar.addMenu('Some menu')
action = AlwaysOpenAction('something', self.menu)
action.setCheckable(True)
action.setEnabled(False)
self.menu.addAction(action)
self.layout().addWidget(self.menubar)
self.resize(500, 400)
def main():
'''Do the window test.'''
qapp = QtWidgets.QApplication(sys.argv)
window = WindowTest()
window.show()
sys.exit(qapp.exec_())
if __name__ == '__main__':
main()
我可以知道它有什么好处吗?也许我们可以找出针对您的问题的不同解决方案,因为这听起来不像预期的行为o f'QActions'。 – Matho
是的,当然。基本上,我有一个应用程序有一个菜单,其中包含一些工具。一些工具具有依赖性,而另一些则不具有依赖性。一些工具具有自动设置自身的依赖关系,所以工具本身不需要像其他人一样每次都按下来运行。他们只需要加载/卸载一次。 在他们没有任何运行时行为的情况下,我想要一种方法来打开/关闭依赖关系,而不需要实际运行QAction的点击功能,但也向用户展示(通常只是通过灰色化或使其不可点击) – ColinKennedy
你可以更好地解释我,你的问题很混乱。 – eyllanesc