Как программно выйти из основного цикла с помощью кнопки холста tkinter

Моя программа генерирует несколько графиков по одному, и у каждого есть кнопка выхода. Программа делает паузу в mainloop, пока я не нажму кнопку, а затем генерирует следующий график.

Мне нужен способ программно нажать или вызвать действие, связанное с этой кнопкой, в данном случае root.quit()

Я попытался вызвать invoke() на кнопке, но это не работает. Я чувствую, что событие теряется до того, как начнется mainloop.

from tkinter import * 

pause = False # passed in as an arg

root = Tk()
root.title(name)

canvas = Canvas(root, width=canvas_width, height=canvas_height, bg = 'white') 
canvas.pack()

quit = Button(root, text='Quit', command=root.quit)
quit.pack()

# make sure everything is drawn
canvas.update()        

if not pause:
    # Invoke the button event so we can draw the next graph or exit
    quit.invoke()

root.mainloop()

person Dodomac    schedule 14.08.2017    source источник


Ответы (1)


Я понял, что проблема была в потере события и блокировке mainloop, поэтому я использовал аргумент pause, чтобы определить, когда запускать mainloop, то есть на последнем графике.

См. раздел понимание основного цикла Tkinter.

Все графики отображаются, а при нажатии кнопки «Выход» в любом окне все окна исчезают и программа завершается.

Если есть лучший способ сделать это, пожалуйста, дайте мне знать, но это работает.

root = Tk()
root.title(name) # name passed in as an arg

# Creation of the canvas and elements moved into another function
draw( root, ... )

if not pause:
    root.update_idletasks()
    root.update()
else:
    mainloop()
person Dodomac    schedule 15.08.2017