禁用编辑 QLineEdit

Posted

技术标签:

【中文标题】禁用编辑 QLineEdit【英文标题】:Disabling editing QLineEdit 【发布时间】:2017-07-21 23:16:58 【问题描述】:

我想让它在某些条件下无法编辑 QLineEdit 小部件。理想情况下,它看起来像:

QLE_On = QCheckBox("Non-editable?")
generic = QLineEdit()

if QLE_On.isChecked():
#disable editing of generic

查看文档,.isReadOnly 可能是如何实现我正在寻找的一种可能的选择,但我不太确定如何实现它。

【问题讨论】:

【参考方案1】:

为了能够确定QLineEdit 是可编辑的,或者您不应该使用setReadOnly() 函数。

您可以通过checkState()函数和stateChanged信号同步和异步知道复选框的状态。在您的情况下,您需要两个,第一个设置初始值,第二个在您通过 GUI 进行检查时,在您的情况下,以下代码是解决方案:

generic.setReadOnly(QLE_On.checkState()!=Qt.Unchecked)
QLE_On.stateChanged.connect(lambda state: generic.setReadOnly(state!=Qt.Unchecked))

例子:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *


app = QApplication(sys.argv)
w=QWidget()
w.setLayout(QVBoxLayout())

QLE_On = QCheckBox("Non-editable?")
generic = QLineEdit()

generic.setReadOnly(QLE_On.checkState()!=Qt.Unchecked)
QLE_On.stateChanged.connect(lambda state: generic.setReadOnly(state!=Qt.Unchecked))

w.layout().addWidget(QLE_On)
w.layout().addWidget(generic)
w.show()
sys.exit(app.exec_())

【讨论】:

谢谢!还有一件事:有没有办法在 QLineEdit 被锁定且无法编辑之前将其设置为固定值?我试着让它连接到一个函数,当它的状态改变时,它会在 QLineEdit 上调用 setText,但它似乎从来没有工作过。【参考方案2】:

只需将lineEdit 设为False 即可使其不可编辑:

self.lineEdit.setEnabled(False)

【讨论】:

【参考方案3】:

如果您希望文本是可选的,请使用:

self.lineEdit.readOnly

【讨论】:

以上是关于禁用编辑 QLineEdit的主要内容,如果未能解决你的问题,请参考以下文章

WordPress 5.0禁用古滕堡编辑器的方法

OroCommerce:在某些条件下禁用订单编辑

使用 rxswift 禁用 UITableViewCell 编辑模式

如何禁用 FastAdmin 双击编辑功能?

禁用 Slick 网格中的特定单元格编辑

如何在 QTableView 中禁用编辑模式?