Невозможно получить доступ к данным списка вне функции tkinter

#python #tkinter

#python #tkinter

Вопрос:

У меня есть сценарий для получения данных от пользователя и последующего их заполнения для некоторых задач в Tkinter.

 import tkinter as tk
root = tk.Tk()

Input_Data = []
# Input_Backup = []

TextEntry = tk.Text(root, height = 15, width = 10)
TextEntry.pack()

confirm_entry = tk.Button(root,text='Confirm Data',
    width=30,command = lambda :[addbox()])
confirm_entry.pack()

def addbox():
    text_from_Box = TextEntry.get('1.0','end-1c').split("n")
    numbers = [x for x in text_from_Box]
    global Input_Data
    for i in range(len(numbers)):
        Input_Data.append(numbers[i])
    print(Input_Data)
    # global Input_Backup
    # Input_Backup = Input_Data
    return Input_Data

print('My Backup List...',Input_Data)

root.mainloop()
 

Но я не могу получить к нему доступ вне функции.
Это дает:

 >> My Backup List... []
>> ['2', '3', '4', '5']
 

Пожалуйста, помогите мне сохранить его для последующего использования.. Я пробовал много вещей, но потерпел неудачу..

Комментарии:

1. Обратные вызовы кнопок ничего не могут вернуть, используйте global . Единственная проблема, с которой вы сталкиваетесь, — переместить print() after mainloop() , потому что код mainloop() выполняется только один раз, обновление списка не имеет значения. Код выполняется до mainloop() и останавливается там, пока вы не закроете окно.

2. Но что, если я использую список внутри mainloop()..

3. Вам придется использовать его внутри какой-либо другой функции.

4. На самом деле я буду использовать его для некоторых других функций, которые я здесь не включил… Вероятно, это будет внутри mainloop().. Я много искал, но потерпел неудачу..

5. Я пробовал внутренние функции, но потерпел неудачу.. Затем преобразуйте мой код в нерабочий, за исключением команды button..

Ответ №1:

Просто убедитесь addbox , что сначала выполняется, после этого вы можете использовать Input_Data где угодно в своем коде, потому что его global . Вот простой пример с кнопкой:

 def show():
   print(Input_Data) # Do anything with the list

tk.Button(root,text='Print the list',width=30,command=show).pack()
 

После добавления этого кода и нажатия этой кнопки вы увидите обновленный список, учитывая, что сначала вы нажали другую кнопку.