对设置为None的变量运行if语句。

时间:2018-08-06 03:43:07

标签: python python-3.x variables tkinter nonetype

可能太新了,无法准确找到我正在寻找的东西。我有一个变量,我全局预设为无,以从var1更新func1的值。如果没有运行该第一个函数以从None更新Var1,是否有一种方法对None变量执行if语句,如果确认仍设置为None则执行一些操作。我已经尝试过==,!=“ 1”和许多其他熟悉的方法,但是没有找到解决方法。这是tkinter的示例:

import tkinter as tkinter
from tkinter import Frame
import tkinter.filedialog as filedialog

root = tkinter.Tk()

class Stupid_app(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master, bd=2)

        Var1 = None

        def func1():
            global Var1
            Var1 = tkinter.filedialog.askopenfilename()  # Open file to get path
            label.config(text=Var1)   # Updates the label
            print(Var1)
            return Var1

        def func2():
            global Var1
            if Var1 is not None:
                print("var is not none")
            else:
                quit()


        Button1 = tkinter.Button(root, text="Get Path", command=func1)
        Button1.pack()

        label = tkinter.Label(root, text="^^Select File ^^")
        label.pack()

        Button2 = tkinter.Button(root, text="Run a Fuction", command=func2)
        Button2.pack()

app = Stupid_app(root)
root.update()
root.mainloop()

宁愿设置全局变量,将变量预置为字符串,似乎总是返回 NameError:未定义名称'var1',该行包含if语句 if var1为“” :。我也尝试过使用"a"或类似方法在函数内部和外部设置变量。 我已经读过几个位置,这是不可能的,也不可能以这种方式使用“无”,但是我看不到任何其他选择。感谢您的任何帮助。

1 个答案:

答案 0 :(得分:0)

未定义变量和设置为None的已定义变量之间存在很大差异。未定义的变量没有值,因为它尚不存在。

示例代码中的Var1对于__init__是本地的,而不是全局的。您可以在__init__中添加另一个全局语句以使其变为全局。

您可以将Var1 = None移动到脚本的顶级(在类定义之外)以定义全局Var1。然后它将是None,直到将其设置为其他值为止。

由于您的函数嵌套在__init__中,因此您根本不必使用全局变量。您可以使用nonlocal而不是global来引用包含函数的本地。这仅在func1中是必需的,因为它是分配给Var1的。 (您可以在不声明非本地语言和全局语言的情况下读取它们。)