可能太新了,无法准确找到我正在寻找的东西。我有一个变量,我全局预设为无,以从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"
或类似方法在函数内部和外部设置变量。
我已经读过几个位置,这是不可能的,也不可能以这种方式使用“无”,但是我看不到任何其他选择。感谢您的任何帮助。
答案 0 :(得分:0)
未定义变量和设置为None
的已定义变量之间存在很大差异。未定义的变量没有值,因为它尚不存在。
示例代码中的Var1
对于__init__
是本地的,而不是全局的。您可以在__init__
中添加另一个全局语句以使其变为全局。
您可以将Var1 = None
移动到脚本的顶级(在类定义之外)以定义全局Var1
。然后它将是None
,直到将其设置为其他值为止。
由于您的函数嵌套在__init__
中,因此您根本不必使用全局变量。您可以使用nonlocal
而不是global
来引用包含函数的本地。这仅在func1
中是必需的,因为它是分配给Var1
的。 (您可以在不声明非本地语言和全局语言的情况下读取它们。)