Проблема с уничтожением в ткинтере под Anaconda Spyder - PullRequest
0 голосов
/ 02 декабря 2018

В следующей программе я могу закрыть окно с помощью кнопки закрытия, но ни с помощью привязки «Esc», ни с помощью кнопки обратного вызова.Меня отправляют на консоль IPython, но окно остается здесь с вращающимся колесом!Прекрасно работает в Терминале или с Anaconda IDLE.Я нахожусь на Mac, High Sierra, Anaconda и Spyder последних версиях (IPython 7.1.1, Spyder 3.3.2).Я подозреваю, что проблема со Spyder.

from tkinter import *
class Myapp(object):
    def __init__(self):
        self.root = Tk()
        self.root.geometry('150x100+1+1')
        self.root.title('Root')
        self.root.bind('<Escape>', lambda e: self.root.destroy())
        self.button = Button(self.root, text='End Program', command=self.end)
        self.button.place(x=10, y=45)
        self.L = [1,2,3]   # result of an omitted computation
    def end(self):
        self.root.destroy()
app = Myapp()
app.root.mainloop()
print(app.L)

Есть подсказка?Спасибо.

1 Ответ

0 голосов
/ 05 декабря 2018

( сопровождающий Spyder здесь ) У вас есть два варианта заставить ваш код работать в Spyder:

  1. Перейти к

    Tools > Preferences > IPython console > Graphics

    и отключите опцию под названием Activate support.Затем, после запуска вашего кода, он заблокирует консоль, но у вас не возникнет никаких других проблем с ним.

  2. Если вы выбрали Tk в качестве бэкэнда в

    Tools > Preferences > IPython console > Graphics

    , затем вам нужно удалить app.root.mainloop() из вашего кода, потому что использование наших предпочтений создает цикл событий Tk, поэтому ваш код не блокирует консоль, и это делает app.root.mainloop() ненужным.

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