如何更改(短)QLineEdit 中文本的可见部分?
Posted
技术标签:
【中文标题】如何更改(短)QLineEdit 中文本的可见部分?【英文标题】:How do I change visible part of the text in a (short) QLineEdit? 【发布时间】:2018-04-24 14:34:50 【问题描述】:在我的 PyQt GUI 中,我有几个相对较短(只读)的 QLineEdit,其中包含一些文本。由于包含的文本比小部件本身长,因此只能显示其中的一部分。 QLineEdit 小部件通常显示最后一部分(默认情况下):
如图所示,我想让文本的第一部分可见(默认情况下)。我该怎么做?
我在下面添加了一些代码来帮助您快速设置测试用例。只需将代码复制粘贴到*.py
文件中,运行它,您应该会在一个窗口中获得一个QLineEdit。
import sys
import os
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
'''================================================================================'''
'''| CUSTOM MAIN WINDOW |'''
'''================================================================================'''
class CustomMainWindow(QMainWindow):
def __init__(self):
super(CustomMainWindow, self).__init__()
# -------------------------------- #
# Window setup #
# -------------------------------- #
# 1. Define the geometry of the main window
# ------------------------------------------
self.setGeometry(100, 100, 800, 200)
self.setWindowTitle("QLineEdit test")
# 2. Create frame and layout
# ---------------------------
self.__frm = QFrame(self)
self.__frm.setStyleSheet("QWidget background-color: #ffffff ")
self.__lyt = QVBoxLayout()
self.__lyt.setAlignment(Qt.AlignTop)
self.__frm.setLayout(self.__lyt)
self.setCentralWidget(self.__frm)
# 3. Create QLineEdit
# -------------------
self.__myQLineEdit = QLineEdit("This is a very long line")
self.__myQLineEdit.setFixedWidth(100)
self.__myQLineEdit.setReadOnly(True)
self.__lyt.addWidget(self.__myQLineEdit)
self.show()
'''=== end Class ==='''
if __name__ == '__main__':
app = QApplication(sys.argv)
QApplication.setStyle(QStyleFactory.create('Fusion'))
myGUI = CustomMainWindow()
sys.exit(app.exec_())
''''''
最后但并非最不重要的一点是,为了完整起见,我想描述一下我的系统:
Windows 10,64 位 Python 3.6 PyQt5【问题讨论】:
【参考方案1】:您可以在各种事件上设置光标位置,例如当行编辑小部件失去焦点时:
class CustomLineEdit(QLineEdit):
def __init__(self, txt, parent=None):
super(CustomLineEdit, self).__init__(txt, parent)
self.setCursorPosition(0)
def focusOutEvent(self, e):
self.setCursorPosition(0)
可能还有其他事件,例如选择何时更改,如果您愿意的话。
【讨论】:
太好了,这行得通! “其他事件,例如选择更改时”是什么意思?那会有什么表现? 可以通过选择文本并将选择扩展到文本的不可见部分来滚动。如果您想防止这种情况发生,请将selectionChanged()
信号连接到执行相同操作的插槽 (self.setCursorPosition(0)
)。
@fferri 在我的例子中自定义QLineEdit
仍然有隐藏的文本左侧部分,但根据focusOutEvent
它在焦点消失时发生了变化。左侧部分变得可见。但是,我生成了多个QLineEdit
,当焦点不在时,光标仍然保持在一行中。在我的情况下,解决方案是首先将文本设置为小部件,然后将 setCursorPosition(0)
.以上是关于如何更改(短)QLineEdit 中文本的可见部分?的主要内容,如果未能解决你的问题,请参考以下文章
Python PyQt5:如果 QLineEdit 为空,如何更改 QLabel 的颜色?
使用PyQt中的QCheckBox或QComboBox更改小部件可见性