1

总的来说,我对 Python 和编程仍然很陌生,但作为一种学习更多 Python 的方法,并且只是修补一些 Windows 注册表数据,我开始研究一个非常简单的 tkinter 和 Python3 数据提取器。

我被困在以某种方式从函数获取输出以存储为变量以供以后使用,有时甚至重复使用。只有几个按钮可以定位路径,保存文件路径,我想在另一个函数中使用该文件路径来从文件中获取数据。

def sw_click():
    sw_path1 = tkinter.filedialog.askopenfilename(initialdir='C:/Users/%s')
    swP_label.config(text=swpath1)
    return sw_path1

然后我想将返回数据(sw_path1)(它只是一个本地系统路径)用于另一个稍后将调用的函数。例如:

def swpull_click():
    swinfo = *function_pullkey (sw_path1)   #Using another function 
    Return sw_data    # again as a variable for later use

所有的功能都是分开工作的,但是将一个返回到另一个以供以后使用一直是一个障碍。我尝试使用另一个变量来存储它,例如

Var1  = sw_path1

但这成为函数本身之外的未解析引用

任何帮助将不胜感激。谢谢

**** 更新在函数外添加变量,如:

    sw_path1 = None

    def software_click():
    global sw_path1
    tkinter.filedialog.askopenfilename(initialdir='')
    softwareP_label.config(text=sw_path1)
        return sw_path1

不存储变量,一旦获取,始终为None。

4

3 回答 3

0

在执行函数之前将变量设置为 None 允许使用全局设置将其调用到函数中。通过在函数内使用 global,只要该变量在函数内更新,则先前设置为 None 的全局变量将被更新。然后将其存储以供以后使用,除非另一个功能或过程清除或替换它。

import tkinter
from tkinter import filedialog

root = tkinter.Tk()

# Setting a variable to none, that can be used, updated, etc.
var1 = None

# So here a user would select their file, which would update var 1 from None, to the results
# This can be handy for validations using if statements to show the variable has not been updated
def function_1():
    global var1   # Must be set to global in the function to be able to access var1 and update
    print(var1)
    var1 = tkinter.filedialog.askopenfilename(initialdir='C:')
    print(var1)

# Updating the variable in the manner above allows for it to be updated repeatedly
# Now that updated variable can be used in function2

def function_2():
    print(var1)

button1 = tkinter.Button(root, text="get the path", command=function_1)
button2 = tkinter.Button(root, text="do something with it", command=function_2)

button1.pack()
button2.pack()
root.mainloop()

使用的三个打印函数(函数 1 中的 2 个,函数 2 中的 1 个)将按以下顺序返回:

None
C:/Windows/regedit.exe
C:/Windows/regedit.exe

去掉预设Var1 = None导致脚本运行,但是调用函数1时,会出现NameError,NameError: name 'var1' is not defined

从 function1 中删除global var1,var1 仍然在外部设置为 None,脚本仍然会运行,但是当使用 function1 时,它将UnboundLocalError: local variable 'var1' referenced before assignment在函数中看到变量的第一行抛出错误。

于 2018-08-06T12:47:19.497 回答
0

在模块级别定义变量。如果在 sw_click 函数中设置,该值仍然可以在 swpull_click 函数中使用。

sw_path1 = None

def sw_click():
    # the global keyword stats that a module level variable can be set inside a function
    global sw_path1
    sw_path1 = tkinter.filedialog.askopenfilename(initialdir='C:/Users/%s')
    swP_label.config(text=swpath1)
    return sw_path1

def swpull_click():
    swinfo = *function_pullkey (sw_path1)   #Using another function 
    return sw_data    # again as a variable
于 2018-08-03T20:03:37.157 回答
0

您需要将变量 sw_data 设为全局变量。目前它是一个函数级变量。为此,请在函数之外声明您的变量。
然后您可以在任何其他函数中调用 sw_path1

希望这可以帮助!

于 2018-08-03T19:07:27.060 回答