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())