#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()
aftermainloop()
, потому что код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()
После добавления этого кода и нажатия этой кнопки вы увидите обновленный список, учитывая, что сначала вы нажали другую кнопку.