QLineEdit Widget#

keywords: QLineEdit, LineEdit, Line Edit

Line Edit Widget 是最简单的用于跟用户交互的输入控件. 它允许用户输入单行文本.

它有这么几个 Signal:

  • cursorPositionChanged: 当光标位置改变时触发.

  • editingFinished: 当这个控件失去焦点时 (你点击了另一个 widget) 触发. 这样可以避免在编辑的过程中 textChanged, textEdited 频繁触发.

  • inputRejected: 如果你给 line edit 通过 setValidator 方法设置了 validator, 当用户输入不合法时触发.

  • returnPressed: 当用户按下回车时触发.

  • selectionChanged: 当用户用鼠标选定了一段文本, 并且选定的文本发生变化时触发.

  • textChanged: 只要文本发生变化, 就会触发.

  • textEdited: 跟 textChanged 不同, 只有用户在编辑时输入了信文本, 才会触发. 而你如果用 setText API 改变了这个文本, 则不会触发.

Examples#

line_edit_widget_1.py
 1# -*- coding: utf-8 -*-
 2
 3"""
 4"""
 5
 6import sys
 7from PySide6 import QtCore, QtWidgets
 8
 9
10class MainWidget(QtWidgets.QWidget):
11    """
12    Ref:
13
14    - QLabel: https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QLineEdit.html
15    """
16
17    def __init__(self, parent):
18        super().__init__(parent)
19        # fmt: off
20        # define
21        # 这是最基本的定义一个 Label 的语法
22        # 你还可以设置其最大宽度, 对齐方式等.
23        self.line_edit_1_wgt = QtWidgets.QLineEdit(self)
24        self.line_edit_1_wgt.setPlaceholderText("Enter something here")
25
26        self.line_edit_2_wgt = QtWidgets.QLineEdit(self)
27        self.line_edit_2_wgt.setText("This is read only text")
28        self.line_edit_2_wgt.setReadOnly(True)
29
30        self.line_edit_3_wgt = QtWidgets.QLineEdit(self)
31        self.line_edit_3_wgt.setPlaceholderText("Type here will trigger a event")
32        self.line_edit_3_wgt.textEdited
33
34        # # 默认情况下 label 是可以是 HTML 的. 你可以放一个 <a> tag 用于实现一个超链接
35        # # 当然你还可以用 HTML 来实现颜色, style 等等.
36        # # 你需要 connect ``linkActivated`` signal 来处理点击事件, 决定用户点击链接的时候
37        # # 会发生什么.
38        # self.label_2_wgt = QtWidgets.QLabel("<font color='red'>label 2</font>: <a href='https://www.google.com'>Click here to visit Google</a>", self)
39        # self.label_2_wgt.linkActivated.connect(self.label_2_link_activated_handler)
40        #
41        # # 当然我们默认情况下都是希望用户点击链接后就在浏览器中打开, 那么你可以
42        # # 调用 ``setOpenExternalLinks(True)`` 来将其设为可以通过点击打开链接.
43        # # 这等于是 QT 帮你实现了这个 signal, 你就无需自己实现了.
44        # self.label_3_wgt = QtWidgets.QLabel("<font color='green'>label 3</font>: <a href='https://www.google.com'>Click here to visit Google</a>", self)
45        # self.label_3_wgt.setOpenExternalLinks(True)
46        # fmt: on
47
48        self.main_lay = QtWidgets.QVBoxLayout()  # Vertical Box layout
49        self.main_lay.addWidget(self.line_edit_1_wgt)
50        self.main_lay.addWidget(self.line_edit_2_wgt)
51        # self.main_lay.addWidget(self.label_3_wgt)
52        self.setLayout(self.main_lay)
53
54    @QtCore.Slot()
55    def label_2_link_activated_handler(self):
56        print("trigger label_2_link_activated_handler")
57
58
59class MainWindow(QtWidgets.QMainWindow):
60    def __init__(self):
61        super().__init__()
62        self.main_wgt = MainWidget(self)
63        self.setCentralWidget(self.main_wgt)
64        self.setGeometry(
65            int(screen_width * 0.25),  # x, at 25% of screen width
66            int(screen_height * 0.25),  # y, at 25% of screen height
67            int(screen_width * 0.5),  # w, 50% screen width
68            int(screen_height * 0.5),  # h, 50% screen height
69        )
70        self.setWindowTitle("ratio_widget")
71        self.show()
72
73
74if __name__ == "__main__":
75    app = QtWidgets.QApplication(sys.argv)
76    screen_width, screen_height = app.screens()[0].size().toTuple()
77    main = MainWindow()
78    sys.exit(app.exec())

Reference#