我需要在Python中创建一个宏。
我想在检查familyId = rs!FamilyID
familyName = rs!FamilyName
时启用QlineEdit
;我该怎么做?
这是代码:
QCheckBox
我定义了一个事件来检查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
我理解问题出在函数 def chbxStateChange(self, chBox, lineEdit):
if chBox.isChecked:
lineEdit.setDisabled(False)
else:
lineEdit.setDisabled(True)
中,但我不知道如何解决它。
错误:
错误返回,无异常设置 回溯(最近一次调用最后一次):文件“C:/ Program 文件/.../ Python / Scripts / test.py“,第332行,in window = Window()文件“C:/ Program Files /.../ Python / Scripts / test.py”,第35行, init
self.chBoxFab.stateChanged.connect(self.chbxStateChange(self.chBoxFab, self.fabricatorLineEdit))
答案 0 :(得分:0)
您的代码中有两个错误。
首先,connect
信号方法采用可调用对象,但是您的代码传入方法的返回值(在这种情况下是None
)。所以相反,你应该建立这样的连接:
self.chBoxFab.stateChanged.connect(
lambda: self.chbxStateChange(self.chBoxFab,
self.fabricatorLineEdit))
self.chBoxPrjManager.stateChanged.connect(
lambda: self.chbxStateChange(self.chBoxPrjManager,
self.projManagerLineEdit))
其次,chbxStateChange
方法将isChecked
视为属性(而不是调用它)会产生相反的错误,这意味着它将始终评估为True
。相反,代码应如下所示:
def chbxStateChange(self, chBox, lineEdit):
if chBox.isChecked():
lineEdit.setDisabled(False)
else:
lineEdit.setDisabled(True)
但是,如果您只想切换行编辑的启用状态,则此代码过于复杂。可以这样建立连接:
self.chBoxFab.toggled.connect(self.fabricatorLineEdit.setEnabled)
self.chBoxPrjManager.toggled.connect(self.projManagerLineEdit.setEnabled)
toggled signal发送按钮的已检查状态(True
或False
),然后可以直接设置行编辑的启用状态。 (如果您想在选中按钮时将行编辑设为已停用,则可以将toggled
连接到setDisabled
。
如果您以这种方式执行操作,则不再需要chbxStateChange
方法。
(注意:QCheckBox类继承了QAbstractButton,这是获取toggled
信号的地方。