Python Tkinter:双击编辑文本

蛙跺

我正在使用 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()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章