首页 > 解决方案 > 像 tkinter python 中的 ms Word 这样的文本字段

问题描述

我编写了类似于 Word 的软件。我陷入了一个问题。如果我点击在我的假软件中写入,将返回一个文本字段。当我不在此文本字段中写入任何内容时,我想通过单击页面的另一部分来删除此文本字段。并创建一个新的文本字段。

from tkinter import *

root = Tk()

def do(event):  
  textBox=Text(root, cursor="arrow", fg=None, bd=0, height=1, 
  width=event.x)
  textBox.delete
  textBox.place(x=event.x, y=event.y)

root.config(bg = "red")
root.bind("<Button-1>",do) 
root.mainloop()

标签: pythontkinter

解决方案


您可以这样做:

from tkinter import Tk, Text


def destroy_empty_widget(event=None):
    if not event.widget.get('0.0', 'end-1c'):
        event.widget.destroy()


def do(event):
    text_box = Text(
        root, cursor="arrow", fg=None, bd=0,
        height=1, width=10)
    text_box.focus_set()
    text_box.bind('<FocusOut>', destroy_empty_widget)
    text_box.place(x=event.x, y=event.y)


root = Tk()
root.config(bg="red")

root.bind("<Button-1>", do)

root.mainloop()

将键盘焦点设置为小部件并绑定该焦点将破坏它。

另外:
我强烈建议不要在导入某些东西时使用通配符(*),你应该导入你需要的东西,例如from module import Class1, func_1, var_2等等,或者导入整个模块:import module然后你也可以使用别名:import module as md或者类似的东西,关键是不要除非您真的知道自己在做什么,否则不要导入所有内容;名称冲突是问题所在。

我强烈建议遵循PEP 8 - Python 代码样式指南。函数名和变量名应在 中snake_case,类名应在CapitalCase. =如果它用作关键字参数 ( func(arg='value')) 的一部分,则周围没有空格,但如果=它用于分配值 ( variable = 'some value'),则周围有空格。在运算符周围留出空间(+-/value = x + y:(此处除外value += x + y))。在函数和类声明周围有两个空行。类方法周围有一个空行。


推荐阅读