我想要一个具有略微改变行为的QAction。我希望只有在QAction被选中时才会发出信号,并且,即使QAction已被禁用,其复选框仍然可以被选中。例如,如果将QAction设置为setEnabled(False),则无法单击QAction或选中/取消选中它。我喜欢它不能再被点击,但不喜欢我无法切换QAction内部的复选框。是否可能修改它以获得我想要的结果?
我附上了一个示例文件。目标是创建一些解决方案,其中QAction被设置为禁用(setEnabled(False)),但用户仍然可以选中/取消选中它。
我附上了一个示例文件。目标是创建一些解决方案,其中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()
setEnabled(False)
的目的是禁用QAction
上所有类型的事件。 - eyllanesc