Вот простой пример того, как вы могли бы написать это, чтобы получить результаты, которые вы ищете.
При использовании global все ваши окна root и связанные с ними поля в функции. Таким образом, вам придется определять global в обеих функциях, а это не то, что вы хотите делать.
Обычно вы хотите записать окно root в глобальном пространстве имен, а не в функцию или запишите ее в класс, чтобы вы могли избежать всеобщего глобального.
button = Button(...)
может не делать то, что вы думаете. Это не возвращает значение из команды после щелчка. Кнопки Tkinter не заботятся ни о чем возвращаемом. Таким образом, вы должны записать это значение в другом месте.
Я не уверен, как работает ваш код, поскольку вы не используете менеджеры геометрии и mainloop()
должен быть присоединен к окну root поэтому я добавил их также.
Пример 1:
import tkinter as tk
def get_input():
global a_and_b
a_and_b = [data_a.get(), data_b.get()]
# If you want to keep a running record of all values submitted
# then you can do this instead:
# a_and_b.append([data_a.get(), data_b.get()])
def print_a_b():
print(a_and_b)
root = tk.Tk()
a_and_b = []
data_a = tk.Entry(root)
data_b = tk.Entry(root)
data_a.pack()
data_b.pack()
tk.Button(root, text='Submit', command=get_input).pack()
tk.Button(root, text='Print A/B List', command=print_a_b).pack()
root.mainloop()
Пример 2 с использованием OOP:
import tkinter as tk
class App(tk.Tk):
def __init__(self):
super().__init__()
self.a_and_b = []
self.data_a = tk.Entry(self)
self.data_b = tk.Entry(self)
self.data_a.pack()
self.data_b.pack()
tk.Button(self, text='Submit', command=self.get_input).pack()
tk.Button(self, text='Print A/B List', command=self.print_a_b).pack()
def get_input(self):
self.a_and_b = [self.data_a.get(), self.data_b.get()]
def print_a_b(self):
print(self.a_and_b)
if __name__ == '__main__':
App().mainloop()