Вот кое-что, что иллюстрирует, что можно сделать, поскольку нет никакого осмысленного способа вернуть значение из функции-обработчика события tkinter
. В нем показано, как ссылаться на глобальную переменную, например current_list
, для использования внутри функции (т. Е. Путем объявления ее global
).
Это необходимо сделать только тогда, когда функция пытается изменить значение - оператор сообщает Python , а не , чтобы создать локальную переменную с таким именем, когда что-то ему назначено (это поведение по умолчанию).
Я добавил Текущий список процессов Button
к GUI, который будет вызывать функцию, которая также добавила с именем process_list()
при каждом нажатии. Эта функция содержит (закомментированный) код, который вы упомянули в одном из ваших комментариев, чтобы указать, где можно выполнить подобную обработку.
from tkinter import *
from tkinter import ttk
my_window = Tk()
my_frame_in = Frame(my_window)
my_frame_in.grid(row=0, column=0)
my_frame_out = Frame(my_window)
my_frame_out.grid(row=0, column=1)
listbox_events = Listbox(my_frame_in, height='5')
listbox_events.grid(row=0, column=0, padx=10, pady=10)
listbox_events_filtered = Listbox(my_frame_out, height='5')
listbox_events_filtered.grid(row=0, column=2, padx=(0, 10), pady=10)
my_instructions = Label(my_window, text='Use arrow keys to move selected items')
my_instructions.grid(row=1, column=0, columnspan=3, pady=(0, 10))
my_list_events = ['A', 'B', 'C', 'D']
current_list = [] # Initilize global variable.
for item in my_list_events:
listbox_events.insert(END, item)
def select_events(event=None):
global current_list
listbox_events_filtered.insert(END, listbox_events.get(ANCHOR))
listbox_events.delete(ANCHOR)
current_list = list(listbox_events_filtered.get(0, END))
def deselect_events(event=None):
global current_list
listbox_events.insert(END, listbox_events_filtered.get(ANCHOR))
listbox_events_filtered.delete(ANCHOR)
current_list = list(listbox_events_filtered.get(0, END))
def process_list():
print('current_list:', current_list)
# for item in current_list:
# x, y = np.loadtxt(item + '_' + 'Test.csv', skiprows=1, usecols=[my_col_x_axis,
# my_col_y_axis], unpack=True, delimiter=',')
my_button = Button(my_window, text='Process current list', command=process_list)
my_button.grid(row=2, column=0, columnspan=3, pady=(0, 10))
listbox_events.bind('<Right>', select_events)
listbox_events_filtered.bind('<Left>', deselect_events)
mainloop()