Я возился с приложением блокнота, используя Tkinter, и я хотел бы, чтобы метка располагалась над основным текстовым полем, чтобы пользователь мог пометить заметку. Я хотел бы иметь возможность дважды щелкнуть метку, чтобы отредактировать ее. Когда пользователь щелкает за пределами текстовой области метки, он сохраняет там текст. Я понимаю, что мог бы сделать простую текстовую область для ввода пользователем, но я также хотел бы, чтобы она была центрирована, а не мигал курсором все время. Я новичок в Tkinter, поэтому, возможно, есть простое решение или лучший подход. Спасибо за любую помощь!
Звучит как отличная рекомендация! я попробую






Вы можете использовать метку, настроенную таким образом, чтобы при двойном щелчке по ней накладывался виджет записи.
Что-то вроде этого, например:
class EditableLabel(tk.Label):
def __init__(self, parent, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.entry = tk.Entry(self)
self.bind("<Double-1>", self.edit_start)
self.entry.bind("<Return>", self.edit_stop)
self.entry.bind("<FocusOut>", self.edit_stop)
self.entry.bind("<Escape>", self.edit_cancel)
def edit_start(self, event=None):
self.entry.place(relx=.5, rely=.5, relwidth=1.0, relheight=1.0, anchor = "center")
self.entry.focus_set()
def edit_stop(self, event=None):
self.configure(text=self.entry.get())
self.entry.place_forget()
def edit_cancel(self, event=None):
self.entry.delete(0, "end")
self.entry.place_forget()
Затем вы можете использовать это как обычную метку, как в следующем примере.
root = tk.Tk()
label = EditableLabel(root, text = "double-click to edit me")
text = tk.Text(root)
label.pack(side = "top", fill = "x", padx=2, pady=2)
text.pack(side = "top", fill = "both", expand=True)
root.mainloop()
Работает именно так, как нужно! Большое спасибо!
Вы можете использовать обычный виджет Entry с его состоянием, установленным на DISABLED, чтобы не было курсора вставки. Привяжите к событию
<Double-Button-1>, чтобы изменить состояние на НОРМАЛЬНОЕ, и к<FocusOut>, чтобы вернуться к ОТКЛЮЧЕННОМУ.