Вызов Python Tkinter wait_window внутри метода и затем возобновление метода - PullRequest
1 голос
/ 12 июля 2011

У меня есть главное окно, которое создает окно настройки (определяемое как окно верхнего уровня) как окно ожидания_ через эту строку кода:

 main.wait_window( Setup_Panel.setup_panel(main) )

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


def write_to_directory_file(main):
    main.execute_command = True
    if (main.input_directory_location.get().strip() == ""):
         main.wait_window( Error_Box.WarningPopup(main, "Input File Missing") )
    elif (main.output_directory_location.get().strip() == ""):
         main.wait_window( Error_Box.WarningPopup(main, "Output Directory Missing") )
    if execute_command:
         directory_file = open("plink.dir", 'w')
         directory_file.write("input_file: " + main.input_directory_location.get() + "\n")
         directory_file.write("output_directory: " + main.output_directory_location.get()    + "\n")
         directory_file.write("output_file: " + main.output_file_name.get() + "\n")
         directory_file.write("hom_name: " + main.HOM_name.get() + "\n")
         enable_parent_window(main.parent_main)
         main.destroy()
    print "FLAG"

Во всплывающем окне с предупреждением выдается сообщение, и две кнопки - «Продолжить», а другая - «Отмена».Если вы нажмете кнопку «Отмена», всплывающее окно с предупреждением будет уничтожено и для main.execute_command установлено значение False, чтобы метод не продолжался.Если вы нажмете продолжить, он должен уничтожить всплывающее окно и установить для main.execute_command значение true, чтобы метод все равно продолжал и записывал в каталог.Моя проблема в том, что, когда всплывающее окно с предупреждением уничтожено, оно не сразу возвращается к методу.Скорее, он не вернется к этой точке и не напечатает «FLAG», пока окно установки также не будет уничтожено.

Как бы я закодировал его так, чтобы он возобновлял метод сразу после того, как всплывающее предупреждение было уничтожено, а нечем после того, как я уничтожу окно предупреждения и окно настройки?Единственное окно, которое вызывает .mainloop (), является окном главной панели.

Основная панель определяется как: main = Tkinter.Tk () и вызывает main.mainloop ()

Панель настройки определяется как: setup_main = Tkinter.Toplevel ()

Всплывающее предупреждение определяется как: warning_main = Tkinter.Toplevel ()

Любая помощь в выяснении этого будет принята, спасибо!

Ответы [ 2 ]

0 голосов
/ 11 июня 2015

Я нашел этот старый вопрос, потому что у меня была похожая проблема.

Согласно моим выводам, wait_window(w) ожидает разрушения w, как в w.destroy(), затем возвращает нормальный поток управления впрограмма.В моем случае я также реализовал свое собственное диалоговое окно, но я не уничтожил это окно.Это может быть ваш случай.

TL / DR: аргумент окна для wait_window () должен быть уничтожен для продолжения нормального потока управления.

0 голосов
/ 05 апреля 2013

Я только что столкнулся с проблемой, подобной той, которую вы описали.Дочернее окно появилось и сработало, но вызвавшая его функция не возобновила работу после закрытия дочернего окна.Однако после того, как родительское окно также было закрыто, функция, которая не возобновилась во времени, наконец-то возобновила.

Я обнаружил, что случайно установил неправильный параметр в строку wait_window().Я написал имя функции, которая создала дочернее окно вместо собственного имени дочерних окон.

Пример:

#some code before
def create_cw(self):
    self.cw = Toplevel()
#some other after

Что было не так:

wait_window(self.create_cw)

Чтобыло решение в моем случае:

wait_window(self.cw)

Я нашел ваш вопрос, пока искал решение моей проблемы.Я надеюсь, что смогу помочь.

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