开发测试环境:PySide6.3.1、Python3.10
问题描述:在某些应用场景中,需要禁止文本框的编辑功能,我们可以用QLineEdit的setReadOnly(True)来设置只读属性,测试中发现文本框无法输入英文字母,但是可以输入中文。这个问题在PyQt5中是不存在的。
import sys
from PySide6.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QApplication, QStyleFactory, QLineEdit
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.resize(300, 100)
self.verticalLayout = QVBoxLayout(self)
self.horizontalLayout = QHBoxLayout()
self.lineEdit = QLineEdit(self)
self.lineEdit.setReadOnly(True)
self.lineEdit.setText("Hello world!")
self.horizontalLayout.addWidget(self.lineEdit)
self.verticalLayout.addLayout(self.horizontalLayout)
if __name__ == "__main__":
app = QApplication([])
app.setStyle(QStyleFactory.create('Fusion'))
window = MainWindow()
window.show()
sys.exit(app.exec())
解决这个问题有两种办法:
1、改用setEnable(False)
self.lineEdit.setEnabled(False)
这种方式可以完全禁止输入框的编辑功能,但是同时也禁用了文本框内容的复制功能,在某些应用场景需要复制文本框内容时就很不方便了。
2、设置只读属性的同时,设置文本框为无焦点。
self.lineEdit.setReadOnly(True)
self.lineEdit.setFocusPolicy(Qt.NoFocus)