用pyqt5编写文本输入框,点击可以显示历史输入内容
时间: 2024-10-06 10:00:43 浏览: 44
用python+pyqt5手工编写一个含交互界面的简易的词法分析器
在PyQt5中创建一个文本输入框并允许用户查看历史输入内容,你可以使用QLineEdit控件配合QHistoryItem模型。首先,你需要设置一个QTextEdit作为历史记录视图,然后创建一个QLineEdit实例用于实时输入。当用户按下Enter键或者点击特定按钮时,可以从QLineEdit的历史记录中读取并添加到QTextEdit中。
以下是一个简单的示例代码:
```python
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLineEdit, QPushButton, QTextEdit, QVBoxLayout, QWidget
from PyQt5.QtCore import QEventLoop, Qt
class HistoryInput(QMainWindow):
def __init__(self):
super().__init__()
# 创建主窗口
self.setWindowTitle('历史输入框')
self.setGeometry(100, 100, 400, 400)
# 输入框
self.input_box = QLineEdit(self)
self.input_box.setPlaceholderText("请输入...")
self.input_box.textChanged.connect(self.update_history) # 监听输入变化
# 历史记录文本编辑器
self.history_textedit = QTextEdit(self)
self.history_textedit.setReadOnly(True)
self.history_textedit.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
# 按钮用于显示历史记录
self.show_history_button = QPushButton("显示历史", self)
self.show_history_button.clicked.connect(self.display_history)
layout = QVBoxLayout()
layout.addWidget(self.input_box)
layout.addWidget(self.show_history_button)
layout.addWidget(self.history_textedit)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
def update_history(self):
current_input = self.input_box.text() # 获取当前输入
self.history.append(current_input) # 将输入添加到历史列表
def display_history(self):
loop = QEventLoop()
QTimer.singleShot(0, loop.quit) # 稍微延迟一下,以便接收用户的输入
loop.exec_()
if self.history: # 如果有历史记录
history_lines = '\n'.join(self.history)
self.history_textedit.setText(history_lines) # 更新历史文本编辑器的内容
# 清空当前输入框
self.input_box.clear()
@property
def history(self):
return self._history if hasattr(self, '_history') else []
@history.setter
def history(self, value):
self._history = value
if __name__ == '__main__':
app = QApplication(sys.argv)
window = HistoryInput()
window.show()
sys.exit(app.exec_())
```
在这个例子中,`update_history`函数会在用户输入改变时保存历史,`display_history`函数则会在点击"显示历史"按钮时展示历史记录。注意,为了实时更新历史记录,这里使用了一个定时器(`QTimer`),在稍后将事件循环退出,等待用户的输入完成。
阅读全文