Пара вещей: не создавайте более одного экземпляра Tk()
.См. Почему не рекомендуется использовать несколько экземпляров Tk? .Вместо этого создайте новые окна как Toplevel()
.
Параметр команды Button()
ожидает функцию, поэтому я написал функцию, которая создает диалоговое окно с Toplevel()
.
Когда вы вызываете pack()
для виджета, возвращаемое значение будет от pack()
, а не от создания виджета.Пример ниже, где переменная e2
получит значение None
.
e2 = Entry(addemploye, width=20).pack()
Вместо этого сначала создайте виджет, а затем упакуйте его:
e2 = Entry(addemploye, width=20)
e2.pack()
Переменная e2
теперь будет указывать на запись.Вы также можете управлять текстом из записи, связывая каждый Entry()
с StringVar()
.
Я сделал пример, в котором я добавляю данные из записей в список.Затем вы можете сохранить этот список, где вы хотите.
from tkinter import *
from tkinter.ttk import *
window = Tk()
window.geometry('500x500+900+50')
window.title("Table with add employee")
table_row = [] # List to hold data from addemployee
def addemployee():
dialog = Toplevel(window)
dialog.geometry('400x400+800+250')
dialog.title('Add new employee')
dialog.focus_set()
Label(dialog, text="Name").pack()
e1 = Entry(dialog, width=20)
e1.pack()
Label(dialog, text="Salary").pack()
e2 = Entry(dialog, width=20)
e2.pack()
Label(dialog, text="Age").pack()
e3 = Entry(dialog, width=20)
e3.pack()
def getting():
table_row.append(e1.get()) # Append Name to table_row
table_row.append(e2.get()) # etc.
table_row.append(e3.get())
# Save table_row to where you want it
print(table_row) # For debugging
B2 = Button(dialog , text = "Save", command=getting)
B2.pack()
B3 = Button(dialog, text="Close", command=dialog.destroy)
B3.pack()
btn = Button(window, text="+ add new employee", command=addemployee)
btn.place(relx=0.95, rely=0.9, anchor=SE)
window.mainloop()