Я хочу создать любое приложение с двумя окнами, первое для выбора параметров, а второе для отображения.
Так выглядела моя попытка
class MainFrame(tk.Tk):
""" This is main class for managing different views(windows) """
def onClosing(self):
self.manager.stopMainLoop()
self.destroy()
#-------------------------------------------------------------------------------------
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
# init main frame
container = tk.Frame(self)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
# init dict for storing avaliable frames
self.frames = {}
# init frame add to dict
frame = StartFrame.StartFrame(container, self)
self.frames[StartFrame] = frame
# init frame add to dict
frame = CanvasFrame.CanvasFrame(container, self)
self.frames[CanvasFrame] = frame
# add close window event handler
self.protocol("WM_DELETE_WINDOW", self.onClosing)
# load canvas as first
self.show_frame(CanvasFrame)
#-------------------------------------------------------------------------------------
def show_frame(self, cont):
""" makes choosen frame visibale at top"""
# get window
frame = self.frames[cont]
# .lift() should also works
# make window in front
frame.tkraise()
# set gird position
frame.grid(row = 0, column = 0, sticky = "nwse")
Это StartFrameкод инициализации
class StartFrame(tk.Frame):
""" This is main class for starting different windows based on choosen options"""
#-------------------------------------------------------------------------------------
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
# init main frame
self.controller = controller
container = tk.Frame(self, width=500, height=300)
# container.pack(side="top", fill="both", expand = True)
# stores starting options
self.checkBoxDict = dict()
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
# add start info
entryInfo = tk.Label(text = "Choose your settings, one window running different algorithm will be open for every check box checked")
# columnspan is used to allow components be better spaced between each other
entryInfo.grid(row = 0, column = 0, columnspan=10)
# add rest of controlers
self.addControlers()
Это код инициализации CanvasFrame
class CanvasFrame(tk.Frame):
""" This is main class for managing displaying visual changes to a path"""
#-------------------------------------------------------------------------------------
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
self.rootWindow = controller
wid = 800
hei = 400
self.canvas = tk.Canvas(self, width = wid, height = hei)
self.canvas.grid(row = 0, column = 0, columnspan = 10,sticky = "nswe")
Также в StartFrame есть кнопка, которая вызывает этот метод из MainFrame
self.controller.show_frame(CanvasFrame)
После нажатия кнопкиметод вызывается, но после выполнения метода tkraise ничего не происходит*
2.) Когда кнопка на StartFrame нажата и безошибочно вызывается метод MainFrame.frame (продолжение), ничего не происходит
Обновление
Я добавил это изменение, и он начал открывать новое окно, но как я могу переключать фреймы поверх главного окна?
d
class CanvasFrame(tk.Toplevel):
""" This is main class for managing displaying visual changes to a path"""
#-------------------------------------------------------------------------------------
def __init__(self, parent, controller):
self.rootWindow = controller
tk.Toplevel.__init__(self,parent)