Как отложить закрытие окна tkinter после нажатия кнопки? - PullRequest
0 голосов
/ 03 июня 2018

У меня есть простой графический интерфейс пользователя tkinter, который отображает переключатель и кнопки отмены.Когда нажата кнопка «ОК», я хочу продолжить выполнение моей программы, а затем через 5 секунд закрыть окно.

import tkinter as tk
from tkinter.ttk import *

gui = tk.Tk()

gui.geometry('330x150')
# set up radio buttons
selected = tk.IntVar()  # selected holds radio button currently selected


def ok_clicked():

    gui.after(5000, lambda : gui.destroy())

    #run stuff while waiting for the gui to close
        if selected.get() == 0:
             # run HS
             import Open_HS
         else:
             # run KA
             import Open_KA

def cancel_clicked():
    gui.destroy()

hs_btn = Radiobutton(gui, width=15, text="Radio 1", value=0,variable=selected).place(x=50, y=40)
ok_btn = Button(gui, width=9, text="OK", command=ok_clicked).place(x=180, y=115)
cancel_btn = Button(gui, width=9, text="Cancel", command=cancel_clicked).place(x=250, y=115)

gui.mainloop()

Это, очевидно, не работает, потому что я звоню

gui.mainloop.

до того, как я установил задержку с помощью

gui.after(5000, lambda : gui.destroy())

, но как это исправить?

Спасибо

1 Ответ

0 голосов
/ 04 июня 2018

Использование gui.after позволяет добиться того, что вам нужно:

import tkinter as tk


def ok_clicked():
    gui.after(5000, gui.destroy)


def cancel_clicked():
    gui.destroy()


if __name__ == '__main__':

    gui = tk.Tk()

    gui.geometry('330x150')
    selected = tk.IntVar()

    tk.Radiobutton(gui, width=15, text="Radio 1", value=0, variable=selected).place(x=50, y=40)
    tk.Button(gui, width=9, text="OK", command=ok_clicked).place(x=180, y=115)
    tk.Button(gui, width=9, text="Cancel", command=cancel_clicked).place(x=250, y=115)

    gui.mainloop()
...