Python 我想在函数之外使用局部变量

Python 我想在函数之外使用局部变量,python,tkinter,Python,Tkinter,我是python新手,我正在尝试创建一个程序,要求用户使用tk.filedialog选择一个图像文件,然后对其执行一些PIL相关工作因为我制作了一个按钮,按下按钮时,将执行一个函数(button=tk.button(win,text=“Select File”,command=buttonFunc),而command参数只取函数名,我定义了一个函数来打开对话框,让用户选择文件,我希望我的函数存储所选文件的路径(在本例中为变量路径),它将路径保存在局部变量中,但我也希望在函数之外使用它,我使用了g

我是python新手,我正在尝试创建一个程序,要求用户使用
tk.filedialog
选择一个图像文件,然后对其执行一些
PIL
相关工作因为我制作了一个按钮,按下按钮时,
将执行一个函数(
button=tk.button(win,text=“Select File”,command=buttonFunc
),而
command
参数只取函数名,我定义了一个函数来打开对话框,让用户选择文件,我希望我的函数存储所选文件的路径(在本例中为变量路径),它将路径保存在局部变量中,但我也希望在函数之外使用它,我使用了
global
语句使变量成为全局变量,但它似乎不起作用

import tkinter as tk
import turtle
from tkinter import filedialog
from tkinter import PhotoImage
import os
from tkinter import INSERT
from tkinter import TOP
from tkinter import LEFT
from tkinter import *
from PIL import Image
from PIL import ImageEnhance
import time

# Main Screen
win = tk.Tk()
win.title('Color Enhancer')
win.geometry('500x70')
# Below line of code is used to set window icon, Not really sure how it works, copied from Net and pasted here.
win.tk.call('wm', 'iconphoto', win._w, tk.PhotoImage(file='icon.gif'))
Lab = tk.Label(win, text='Welcome to Color Enhancer, This mini utility is written purely in \n'
                         'Python and can be used to change colors of given Image, Select \n'
                         ' image and see the magic.')
Lab.pack()


def buttonFunc():
    global path
    path = tk.filedialog.askopenfilenames()
    print(path)
# buttonFunc() --> Works fine if i call it here, But it opens the dialog before even the button appears..


button = tk.Button(win, text='Select File', command=buttonFunc)
button.pack(side=BOTTOM)
print(path)
win.mainloop()
我试图运行代码,但它抛出以下错误

Traceback (most recent call last):
  File "C:\Users\iMacPro 2K19\Desktop\Main\Python\Scratches\PIL_Edit.py", line 34, in <module>
    print(path)
NameError: name 'path' is not defined
回溯(最近一次呼叫最后一次):
文件“C:\Users\iMacPro 2K19\Desktop\Main\Python\Scratches\PIL_Edit.py”,第34行,在
打印(路径)
NameError:未定义名称“路径”
我知道这是说路径没有定义。。但正如你所看到的,我已经定义了它,也使它全球化了。。
我想说的一件事是,如果我在定义它之后调用
buttonFunc()
。。它起作用了。。但是在我按下按钮之前它会打开对话框。。有没有其他方法可以解决这个问题,或者有人告诉我哪里出了问题。

路径只在函数
buttonFunc()中定义。
。那很好。但这也意味着变量
path
未定义,直到调用
buttonFunc()
func对其进行初始化

由于您的代码仅在按下按钮时调用该func,因此在点击
print(path)
语句时,
path
变量仍然未定义,因为尚未点击按钮调用func初始化变量


您可以在调用
print(path)
之前初始化
path
变量,也可以从那里删除
print(path)
调用,因为它实际上不做任何事情,您可以将其保留在函数内部。

您应该在函数外部初始化path变量。只有这样,您才能在全球范围内访问它

path=None 
def buttonFunc():
    global path
    path="file path"
buttonFunc()
print(path)

您是否尝试过在函数外部像这样初始化path变量:path=''?您希望在代码中的
win.mainloop()
之前的
print(path)
语句中看到什么?因为即使您已经初始化了
path
变量,在打印它的时候,路径也是没有意义的。
path
内部
buffonFunc()
是一个局部变量,没有在函数内部声明
global path
。所以它不会更改全局
路径
变量。@acw1668我知道了,请参阅更新的答案。它很好用。