可以这样实现:
1.在需要双击创建文本框的区域设置双击事件,如:
self.my_widget.mouseDoubleClickEvent = self.create_text_box
2.在create_text_box函数中创建一个QLineEdit对象并加入到布局中:
def create_text_box(self, event):
text_box = QLineEdit(self.my_widget)
text_box.setGeometry(event.x(), event.y(), 50, 20)
text_box.show()
text_box.returnPressed.connect(self.read_text_box_data)
3.在read_text_box_data函数中读取文本框的内容并删除文本框:
def read_text_box_data(self):
text_box = self.sender()
data = text_box.text()
# 读取文本框的数据,进行相应的操作
text_box.deleteLater()
下面是一个简单的代码示例:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLineEdit, QGridLayout, QWidget
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.line_edit = None
self.initUI()
def initUI(self):
grid = QGridLayout()
grid.setSpacing(10)
central_widget = QWidget()
central_widget.setLayout(grid)
self.setCentralWidget(central_widget)
self.line_edit = QLineEdit()
self.line_edit.setText("double click to create a text box")
self.line_edit.doubleClicked.connect(self.create_text_box)
grid.addWidget(self.line_edit, 0, 0)
self.setGeometry(300, 300, 300, 200)
self.show()
def create_text_box(self):
text_box = QLineEdit()
text_box.returnPressed.connect(self.read_and_remove)
grid = self.centralWidget().layout()
grid.addWidget(text_box, grid.count(), 0)
def read_and_remove(self):
sender = self.sender()
text = sender.text()
print(text)
grid = self.centralWidget().layout()
grid.removeWidget(sender)
sender.deleteLater()
if __name__ == '__main__':
app = QApplication(sys.argv
第二个例子
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.line_edit = QLineEdit(self)
self.line_edit.setGeometry(10, 10, 200, 30)
self.line_edit.setText("")
self.line_edit.returnPressed.connect(self.on_enter)
self.line_edit.dblClickEvent = self.on_dblClick
self.show()
def on_dblClick(self, event):
self.line_edit.show()
def on_enter(self):
text = self.line_edit.text()
print("You entered: ", text)
self.line_edit.setText("")
self.line_edit.hide()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
这段代码中,QLineEdit的dblClickEvent事件是自定义的双击事件,该事件在双击时会触发on_dblClick方法。当用户按下回车键时,returnPressed信号会被触发,调用on_enter方法。该方法会读取输入的文本并打印到控制台,并将输入的文本清空,隐藏输入框。