Как передать переменную между двумя функциями в tkinter python? - PullRequest
3 голосов
/ 22 февраля 2020

Вот мой код:

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

Как я понимаю, мне нужно как-то передать переменную "folder" между двумя функциями , Я уже пробовал много вещей, таких как использование классов, если честно, я не очень знаком с.

Пожалуйста, помогите!

1 Ответ

3 голосов
/ 22 февраля 2020

Это классическая c проблема при использовании функций. Внутри функции все переменные являются локальными, поэтому они существуют только в той функции, что вам нужно сделать, это глобализировать переменную так, чтобы она существовала во всей программе. Это делается путем произнесения global, а затем имени переменной до определения указанной переменной. Ваш новый код должен выглядеть следующим образом.

global folder
folder = filedialog.askdirectory()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...