Прости ми. Аз съм нов в Tkinter и имам само просто/скромно разбиране за python. Общата ми цел е да направя програма, подобна на съветника, където потребителят въвежда непрекъснато нарастващи специфики, докато програмата върви (като определени рамки се появяват в зависимост от определени входове). Опитвам се просто да накарам основната идея на съветника да работи и срещам някои проблеми. Ето моят код (коментирах неща, които други източници предполагат, че са на прав път, но се провалиха за мен):
from Tkinter import *
root = Tk()
#root.minsize(300,300) ?
#root.geometry("300x300") ?
def next():
move(+1)
def prev():
move(-1)
def exit_program():
root.destroy()
page1 = Frame(root, width=300, height=300)
page1.grid()
#page1.grid(row=0,column=0, sticky="nsew") ?
#page1.grid_rowconfigure(0, weight=1) ?
#page1.grid_columnconfigure(0, weight=1) ?
p1_label = Label(page1, text='This is page 1 of the wizard.').grid(column=1, row=0)
p1_quit = Button(page1, text="Quit", command=exit_program).grid(column=1, row=2)
p1_next = Button(page1, text="Next", command=next).grid(column=2, row=2)
page2 = Frame(root)
p2_label = Label(page2, text='This is page 2 of the wizard.').grid(column=1, row=0)
p2_prev = Button(page2, text="Prev", command=prev).grid(column=1, row=2)
p2_next = Button(page2, text="Next", command=next).grid(column=2, row=2)
page3 = Frame(root)
p3_label = Label(page3, text='This is page 3 of the wizard.').grid(column=1, row=0)
p3_prev = Button(page3, text="Prev", command=prev).grid(column=1, row=2)
p3_quit = Button(page3, text="Quit", command=exit_program).grid(column=2, row=2)
pages = [page1, page2, page3]
current = page1
def move(dirn):
global current
idx = pages.index(current) + dirn
if not 0 <= idx < len(pages):
return
current.grid_forget()
current = pages[idx]
current.grid()
root.mainloop()
Имам няколко въпроса:
- Защо първият (и всички) кадър(и) се свиват до размера на джаджите вътре, въпреки че съм задал ширината и височината да бъдат определено количество? Погледнах онлайн и очевидно grid_propagate(False) изключва повторното оразмеряване, но едновременно силно НЕ се препоръчва и направо неуспешно (да, прави прозореца размерите, които искам, но самата "решетка" все още е в горната част -наляво). Не трябва ли да мога да посоча размерите на рамка и мрежата да се подравни с тези размери (т.е. организацията на мрежата се запазва, само не площта)? Този проблем свързан ли е с процеса на съветника? Бих предпочел не също, но вероятно все още мога да напиша програмата в един прозорец.
- Защо решетката изглежда 2x2? Не трябва ли да е 3x3, защото нулевият запис е валиден? Поставих бутон (p1_next) на позиция (2x2). Дали защото нищо не е в колоната 0, grid() го премахва и измества всичко наляво?
- Това ли е най-добрият подход за това, което се опитвам да постигна? Страхувам се, че знам само абсолютните основи на ООП и бих предпочел да избягвам, ако е възможно (също така тази програма, макар и голяма за мен, ще се окаже незначителна според съвременните стандарти за разработка на софтуер).
От опита си да научавам неща, имам предположение, че проблемът не е бързо решение и че имам нужда от голяма промяна на парадигмата, за да разбера това. Така или иначе, всяка помощ ще бъде много ценена
Съжалявам, ако това е дубликат. И благодаря!