如何仅在单击按钮时返回变量的值?

时间:2016-07-24 17:32:16

标签: python tkinter

我的代码:

def file_exists(f_name):
        select = 0

        def skip():
            nonlocal select
            select = 1
            err_msg.destroy()

        def overwrite():
            nonlocal select
            select = 2
            err_msg.destroy()

        def rename():
            global select
            select = 3
            err_msg.destroy()

        # Determine whether already existing zip member's name is a file or a folder

        if f_name[-1] == "/":
            target = "folder"
        else:
            target = "file"

        # Display a warning message if a file or folder already exists

        ''' Create a custom message box with three buttons: skip, overwrite and rename. Depending
            on the users change the value of the variable 'select' and close the child window'''

        if select != 0:
            return select

我知道使用nonlocal是邪恶的,但我必须继续我的程序方法,至少对于这个程序。

问题是,当我调用此函数时,无论我按下哪个按钮,它都会立即返回并返回select的初始值(即0)。当我按下按钮时,select的值将相应更改。

那么只有在按下按钮后才能返回它?正如您所看到的,我的第一次尝试是仅在select为!= 0时返回值,但这不起作用。

感谢您的建议!

1 个答案:

答案 0 :(得分:-1)

您可以使用.update()功能来阻止而不冻结GUI。基本上,您在循环中调用root.update(),直到满足条件。一个例子:

def block():
    import Tkinter as tk

    w= tk.Tk()

    var= tk.IntVar()
    def c1():
        var.set(1)
    b1= tk.Button(w, text='1', command=c1)
    b1.grid()

    def c2():
        var.set(2)
    b2= tk.Button(w, text='2', command=c2)
    b2.grid()

    while var.get()==0:
        w.update()
    w.destroy()

    return var.get()

print(block())