Команда Tkinter Pop Up - PullRequest
0 голосов
/ 13 июня 2018

Я делаю текстовый редактор на Python с Tkinter, и теперь я делаю кнопку New, но когда я нажимаю эту кнопку, она удаляет все, прежде чем я нажимаю кнопку «YES».Там код:

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 голосов
/ 13 июня 2018

В следующем коде text.delete() на самом деле вызывается, когда вы пытаетесь передать его как команду для объекта Button:

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

Поскольку для удаления вы, очевидно, не требуется никаких параметровможет легко использовать лямбда-функцию:

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

, которая создает функцию, которая вызывает text.delete() и передает эту новую функцию в качестве значения command.

В качестве альтернативы вы можете определить свой собственныйи передайте ее в виде команды:

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


..., command=delete_text))

В обоих случаях указывается глобальная переменная text, поэтому вам следует рассмотреть возможность рефакторинга кода, чтобы использовать классы, если это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...