如何在 tkinter python 中的两个函数之间传递变量?

Posted

技术标签:

【中文标题】如何在 tkinter python 中的两个函数之间传递变量?【英文标题】:How do I pass a variable between two functions in tkinter python? 【发布时间】:2020-06-06 22:38:49 【问题描述】:

这是我的代码:

import os
import tkinter as tk

from tkinter import filedialog

root = tk.Tk()

def click():
    folder = filedialog.askdirectory()
    button["text"] = folder

def click2():
    folder2 = filedialog.askdirectory()
    button1["text"] = folder2

def click3():
    list = os.listdir(folder)
    print(list)

entry = tk.Entry(root)
entry.grid(row=0, column=3)

label = tk.Label(root, text="Search from:")
label.grid(row=0, column=0)
label3 = tk.Label(root, text="Search:")
label3.grid(row=0, column=2)

label2 = tk.Label(root, text="Sort to:")
label2.grid(row=1, column = 0)

button = tk.Button(root, text="( ͡° ͜ʖ ͡°)", command=click, font=("TkDefaultFont", 12))
button.grid(row=0, column=1)

button1 = tk.Button(root, text="( ͡° ͜ʖ ͡°)", command=click2, font=("TkDefaultFont", 12))
button1.grid(row=1, column=1)

confirm = tk.Button(root, text="Confirm", command=click3, font=("TkDefaultFont", 12))
confirm.grid(row=2, column=1)


root.mainloop()

我得到一个错误: NameError: name 'folder' is not defined

据我了解,我需要以某种方式在两个函数之间传递“文件夹”变量。我已经尝试过很多东西,比如使用类,老实说,我不是很熟悉。

请帮忙!

【问题讨论】:

【参考方案1】:

这是使用函数时的经典问题。在一个函数中,所有变量都是局部的,因此它们只存在于该函数中,您需要做的是使变量全球化,使其存在于整个程序中。这是通过在定义所述变量之前先说全局然后是变量名来完成的。 您的新代码应如下所示。

global folder
folder = filedialog.askdirectory()

【讨论】:

也许你可以添加一个解释,以方便提问者

以上是关于如何在 tkinter python 中的两个函数之间传递变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何从widget的函数返回值,并将其传递给Tkinter,Python中的另一个小部件的函数

如何在 tkinter ~ python 中放置在网格中的两个小部件之间添加空间?

Python / Tkinter如何更新网格中的信息

用Python中的tkinter模块作图(续)

如何将回车键绑定到 tkinter 中的函数?

Python Tkinter 中的单选按钮值