Добрый день.Изучение ткинтера с использованием Python 3.5.Для начала я добился некоторого успеха, используя pack () для фреймов в root (), а затем использовал grid () внутри упакованных фреймов.Тогда я решил использовать сетку, чтобы поместить Рамки в корень и сетку внутри этих рамок.По сути, получить некоторую информацию от пользователя - сделать что-то с информацией - какой-то триггер для сброса кадров - начать все сначала.Во время процесса destroy () в pack () кажется, что Frames добавлены в root, а в grid () они вставлены.Это правильно?Разница в примерах кода заключается в примере pack (), который я использую:
На другом замечании - я также столкнулся с проблемой типа записей ('<class 'tkinter.Entry Object'>
) вместо tkinter.Entry
-Я не смог воспроизвести это сегодня.Есть ли способ прочитать такое значение, как get () не работает?
Спасибо
i = root.slaves()
for child in i[1].winfo_children():
Однако в примере grid () мне нужно было использовать:
i = root.grid_slaves()
for child in i[0].winfo_children():
Минимальный рабочий пример с использованием pack ():
def new():
showEntries()
D_setup()
all_entries['D'] = D
def D_setup():
dx = len(D)
# D Label
labD = Label(frame_for_D, text='Place to Enter Value')
labD.grid(row = dx * 2, column = 0)
# D Entry
entD = Entry(frame_for_D, width=50)
entD.grid(row = dx * 2 + 1, column=0)
entD.delete(0,END)
entD.insert(END, s[dx])
# Append the last Entry
D.append(entD)
return
def showEntries():
if len(D) == 0:
return
for number, ent in all_entries.items():
if str(type(ent)) == "<class 'tkinter.Entry'>":
print(type(ent))
print (number, ent.get())
elif str(type(ent)) == "<class 'list'>":
print (number, [x.get() for x in ent])
if len(D) > 5:
i = root.slaves()
for child in i[1].winfo_children():
child.destroy()
D.clear()
all_entries.clear()
D.clear()
print(all_entries)
print(D)
raise SystemExit
return
#------------------------------------
all_entries = {}
D = []
root = Tk()
root.configure(background = 'green')
# -- Define all frames
frame_for_buttons = Frame(root,background='black')
frame_for_D = Frame(root,background='red')
# -- pack all frames
frame_for_buttons.pack()
frame_for_D.pack()
# -- root
newTButton = Button(frame_for_buttons, text='New\n\n' +
'Enter',
activebackground='red',
activeforeground='black',
borderwidth=10, foreground='black',
background='yellow',
highlightthickness=20,padx=5,pady=5,
command=new)
newTButton.grid(row=0, column=0)
root.mainloop()
Пример с использованием grid ():
def new():
showEntries()
D_setup()
all_entries['D'] = D
def D_setup():
dx = len(D)
# D Label
labD = Label(frame_for_D, text='Place to Enter Value')
labD.grid(row = dx * 2, column = dx)
# D Entry
entD = Entry(frame_for_D, width=50)
entD.grid(row = dx * 2 + 1, column=dx)
entD.delete(0,END)
entD.insert(END, s[dx])
# Append the Entry
D.append(entD)
return
def showEntries():
if len(D) == 0:
return
for number, ent in all_entries.items():
if str(type(ent)) == "<class 'tkinter.Entry'>":
print(type(ent))
print (number, ent.get())
elif str(type(ent)) == "<class 'list'>":
print([type(x) for x in ent])
print (number, [x.get() for x in ent])
if len(D) > 5:
#i = frame_for_D.grid_slaves() .winfo_children()
i = root.grid_slaves()
for child in i[0].winfo_children():
child.destroy()
D.clear()
all_entries.clear()
D.clear()
print(all_entries)
print(D)
raise SystemExit
return
#------------------------------------
all_entries = {}
D = []
root = Tk()
root.configure(background = 'green')
# -- Define all frames
frame_for_buttons = Frame(root,background='black')
frame_for_D = Frame(root,background='red')
# -- Grid all frames
frame_for_buttons.grid(row = 0, column = 0)
frame_for_D.grid(row = 1, column = 0, pady = 10, padx = 10)
# root
newTButton = Button(frame_for_buttons, text='New\n\n' +
'Enter',
activebackground='red',
activeforeground='black',
borderwidth=10, foreground='black',
background='yellow',
highlightthickness=20,padx=5,pady=5,
command=new)
newTButton.grid(row=0, column=0)
root.mainloop()