我需要用Python做一个宏。在
我想在选中QCheckBox
时启用QlineEdit
;我该怎么做?在
代码如下:
import os, sys, App
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtWidgets import *
from PySide2.QtCore import *
from PySide2.QtGui import *
class Window(QDialog):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.fabricatorLineEdit = self.createLineEdit("fabricatorLineEdit", "fabricator")
self.fabricatorLineEdit.setDisabled(True)
self.chBoxFab = self.createCheckBox("chBoxFab", "Insert a alternative value to 'fabricator' key:")
self.chBoxFab.stateChanged.connect(self.chbxStateChange(self.chBoxFab, self.fabricatorLineEdit))
self.chBoxPrjManager = self.createCheckBox("chBoxPrjManager", "Insert a alternative value to 'Project Manager' key:")
self.projManagerLineEdit = self.createLineEdit("projManagerLineEdit", "Project Manager")
self.projManagerLineEdit.setDisabled(True)
self.chBoxPrjManager.stateChanged.connect(self.chbxStateChange(self.chBoxPrjManager , self.projManagerLineEdit))
mainLayout = QtWidgets.QFormLayout()
mainLayout.addRow(self.chBoxFab)
mainLayout.addRow(self.fabricatorLineEdit)
mainLayout.addRow(self.chBoxPrjManager)
mainLayout.addRow(self.projManagerLineEdit)
self.setLayout(mainLayout)
def createLineEdit(self, objName, defaultTxt):
lineEdit = QtWidgets.QLineEdit(self)
lineEdit.setObjectName(objName)
lineEdit.setText(defaultTxt)
return lineEdit
def createCheckBox(self, objName, objCaption):
chBox = QtWidgets.QCheckBox(self)
chBox.setObjectName(objName)
chBox.setText(objCaption)
return chBox
def chbxStateChange(self, chBox, lineEdit):
if chBox.isChecked:
lineEdit.setDisabled(False)
else:
lineEdit.setDisabled(True)
if __name__ == '__main__':
import sys
window = Window()
result = window.exec_()
我定义了一个事件来检查QCheckBox
的状态以启用QlineEdit
,但它不起作用:
我知道问题出在函数chbxStateChange
中,但我不知道如何解决它。在
错误:
error return without exception set Traceback (most recent call last): File "C:/Program Files/.../Python/Scripts/test.py", line 332, in window = Window() File "C:/Program Files/.../Python/Scripts/test.py", line 35, in init
self.chBoxFab.stateChanged.connect(self.chbxStateChange(self.chBoxFab, self.fabricatorLineEdit))
代码中有两个错误。在
首先,signals的
connect
方法接受一个可调用对象,但是您的代码传递了一个方法的返回值(在本例中是None
)。所以,你应该建立这样的联系:其次,
^{pr2}$chbxStateChange
方法犯了相反的错误,将isChecked
视为一个属性(而不是调用它),这意味着它将始终计算为True
。因此,代码应该如下所示:但是,如果您只想切换行编辑的启用状态,那么这段代码就过于复杂了。可以这样进行连接:
toggled signal发送按钮的选中状态(}),然后可以直接设置行编辑的启用状态。(如果您想在选中按钮时禁用行编辑功能,那么可以将
True
或{toggled
连接到setDisabled
)。在如果这样做,就不再需要
chbxStateChange
方法。在(注意:QCheckBox类继承QAbstractButton,这是它从中获得
toggled
信号的地方)。在相关问题 更多 >
编程相关推荐