Tkinter弹出命令

时间:2018-06-13 11:04:01

标签: python tkinter

我正在使用Tkinter在Python中创建一个文本编辑器,现在我正在执行“新建”按钮,但是当我按下该按钮时,它会删除所有内容,然后单击按钮" YES&#34 ;。 代码是:

def new():
   pop_up_new = Tk()
   lb_new = Label(pop_up_new, text="Are you sure to delete?")
   bt_new = Button(pop_up_new, text="Yes", command=text.delete(END, '1.0'))
   bt_new_no = Button(pop_up_new, text="No", command=pop_up_new.destroy)
   lb_new.grid()
   bt_new.grid(row =1 , column = 0, sticky = W)
   bt_new_no.grid(row = 1, column = 1, sticky = W)


text = Text(window)
text.pack()

menubar = Menu(window)
filemenu = Menu(menubar, tearoff = 1)
filemenu.add_command(label="Open")
filemenu.add_command(label="Save")
filemenu.add_command(label="New", command=new)
filemenu.add_separator()
filemenu.add_command(label="Exit")
menubar.add_cascade(label="File", menu=filemenu)
window.config(menu=menubar)

1 个答案:

答案 0 :(得分:0)

在您尝试将其作为text.delete()对象的命令传递时,实际上会调用以下代码Button

Button(pop_up_new, text="Yes", command=text.delete(END, '1.0'))

由于删除显然不需要参数,因此您可以轻松使用lambda函数:

..., command=lambda : text.delete(END, '1.0'))

创建一个调用text.delete()的函数,并将此新函数作为command的值传递。

或者,您可以定义自己的函数并将其作为命令传递:

def delete_text():
    text.delete(END, '1.0')


..., command=delete_text))

在这两种情况下都引用了全局变量text,因此您应该考虑重构代码以尽可能使用类。