Pyqt5双击标签改变文本
class EditableLabel(QWidget):
def __init__(self, text="", parent=None,size=(None,None)):
super().__init__(parent)
# 初始化标签和输入框
self.label = QLabel(text, self)
self.input = QLineEdit(self)
# 设置字体大小
self.label.setStyleSheet("font-size: 18px;")
self.input.setStyleSheet("background:transparent;border: none;font-size: 18px;")
# 设置输入框初始不显示
self.input.setVisible(False)
# 设置控件大小
self.setFixedSize(size[0], size[1]) # 设置 EditableLabel 的大小
# 将标签和输入框放在固定位置
self.label.setGeometry(0, 0, size[0], size[1]) # 标签的位置和大小
self.input.setGeometry(0, 0, size[0], size[1]) # 输入框的位置和大小'''
# 双击标签时显示输入框,隐藏标签
self.label.mouseDoubleClickEvent = self.on_label_double_click
# 失去焦点时隐藏输入框,显示标签
self.input.editingFinished.connect(self.on_editing_finished)
# 失去焦点时隐藏输入框,显示标签
self.input.focusOutEvent = self.on_focus_out
def on_label_double_click(self, event):
# 隐藏标签,显示输入框
self.label.setVisible(False)
self.input.setVisible(True)
self.input.setText(self.label.text()) # 设置输入框的内容为标签文本
self.input.setFocus()
def on_editing_finished(self):
# 更新标签文本为输入框的内容
self.label.setText(self.input.text())
self.label.setVisible(True)
self.input.setVisible(False)
def on_focus_out(self, event):
# 失去焦点时隐藏输入框,显示标签
# 更新标签文本为输入框的内容
self.label.setText(self.input.text())
self.label.setVisible(True)
self.input.setVisible(False)
使用标签和输入栏来实现操作 注意在放置时的用法:
self.label = EditableLabel(f"Text",self,(80,30))
self.label.setGeometry(10, 30, 80, 30)
这里的setGeometry只起到设置位置的作用 前两个参数来设置位置 后两个参数在这里是无效的 如果要设置大小调整EditableLabel的第三个参数
EditableLabel("文本",self,(x大小,y大小))
效果: