Tkinter .tkrise () и .lift () ничего не делает - PullRequest
0 голосов
/ 09 декабря 2018

Я хочу создать любое приложение с двумя окнами, первое для выбора параметров, а второе для отображения.

Так выглядела моя попытка

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...