как правильно переключиться с pack () на place () - PullRequest
0 голосов
/ 06 января 2019

У меня есть разделенный графический интерфейс tkinter на разные классы, и я хочу подключить их на домашнем экране с помощью кнопок, как это сделал Стивен М. Васселларо: Переключение между двумя кадрами в tkinter

import tkinter.ttk as ttk
#from alexa_site_2 import Frame_alexa
from globals import Globals
from tkinter import PhotoImage
import tkinter as tk

class SampleApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self._frame = None
        self.geometry('{}x{}'.format(1024, 600))
        self.configure(bg="white")
        for i in range(len(Globals.image_files)):
            image_box = PhotoImage(file=Globals.image_files[i])
            Globals.list_images.append(image_box)
        self.switch_frame(StartPage)

    def switch_frame(self, frame_class):
        """Destroys current frame and replaces it with a new one."""
        new_frame = frame_class(self)
        if self._frame is not None:
            self._frame.destroy()
        self._frame = new_frame
        self._frame.place(x=110,y=0)
        print("switch frame function")

class StartPage(ttk.Frame):
    def __init__(self, master):
        ttk.Frame.__init__(self, master)
        #self.place(x=0,y=0)
        ttk.Label(self, text="This is the start page").pack()
        ttk.Button(self, text="Open page one",
                  command=lambda: master.switch_frame(PageOne)).pack()
        ttk.Button(self, text="Open page two",
                  command=lambda: master.switch_frame(PageTwo)).pack()
    ttk.Button(self, text="Open page two",
      command=lambda: master.switch_frame(Frame_alexa)).pack()

class PageOne(ttk.Frame):
    def __init__(self, master):
        ttk.Frame.__init__(self, master)
        ttk.Label(self, text="This is page one").pack(side="top", fill="x", pady=10)
        ttk.Button(self, text="Return to start page",
              command=lambda: master.switch_frame(StartPage)).pack()

class PageTwo(ttk.Frame):
    def __init__(self, master):
        ttk.Frame.__init__(self, master)
        ttk.Label(self, text="This is page two").place(x=40,y=10)
        ttk.Button(self, text="Return to start page",
              command=lambda: master.switch_frame(StartPage)).place(x=0,y=0)

if __name__ == "__main__":

    app = SampleApp()
    app.mainloop()

когда я пытаюсь подключить свои собственные классы, в результате я получаю белое окно. Вы можете увидеть, как это работает в pageOne, а моя проблема в PageTwo. Я не планирую смешивать place () и pack (). Мне просто нужно место () и ваша помощь, пожалуйста.

...