在tkinter中的帧之间切换而不是相互堆叠

时间:2016-06-15 14:22:01

标签: python tkinter

我一直在尝试本网站上关于在tkinter中切换窗口的所有例子,但我得到的只是凸起框架上的按钮被堆叠在顶部,而没有“隐藏”其他框架

主屏幕:

import tkinter as tk
import Controller.ProdutoController as viewProduto

class Main:
    def __start__(self):

        self.roottk = tk.Tk()
        self.root = tk.Frame(self.roottk)

        self.root.pack(side="top", fill="both", expand=True)
        self.root.grid_rowconfigure(0, weight=1)
        self.root.grid_columnconfigure(0, weight=1)
        self.viewProduto = viewProduto.ProdutoController(self, self.root)
        self.viewMain = MainView(self, self.root)

        self.viewMain.tkraise()
        self.viewMain.master.master.title("Tela Principal")
        self.roottk.mainloop()



    def toprodutos(self):

        self.viewProduto.viewProduto.tkraise()

    def tomain(self):

        self.viewMain.tkraise()


class MainView(tk.Frame):

    def __init__(self, ct, root):
        tk.Frame.__init__(self,root)
        self.startUI()
        self.ct = ct
        self.grid( row = 0 , column = 0, sticky = "nsew")



    def startUI(self):

        botaoProdutos = tk.Button(self, text = "Produtos", command = self.toprodutos , padx = 5 , pady = 5)
        botaoProdutos.pack(side = "top")

        botaoEntrada = tk.Button(self, text="Entrada", command=self.toentrada, padx=5, pady=5)
        botaoEntrada.pack(side="top")

        botaoSaida = tk.Button(self, text="Saída", command=self.tosaida, padx=5, pady=5)
        botaoSaida.pack(side="top")

    def toprodutos(self):
        self.ct.toprodutos()
    def toentrada(self):
        return
    def tosaida(self):
        return

“Produtos”屏幕:

class ProdutoController:

    def __init__(self, viewMain, root):

        self.produtos = []
        self.viewMain = viewMain
        self.viewProduto = ProdutoView(root, self)


    def newproduto(self, nome, preco, quantidade):
        return

    def listprodutos(self):
        return

class ProdutoView(tk.Frame):
    def __init__(self, root, ct):
        tk.Frame.__init__(self, root)
        self.createWidgets()
        self.ct = ct
        self.grid(row = 0, column = 0)


    def createWidgets(self):

        self.list = tk.Button(self)
        self.list["text"] = "List"
        self.list["command"] = self.listProdutos
        self.list.pack(side="top")

    def listProdutos(self):
        self.ct.listprodutos()

1 个答案:

答案 0 :(得分:1)

您没有使用“sticky”属性来强制ProdutoView填充它所在的行和列。

class ProdutoView(tk.Frame):
    def __init__(self, root, ct):
        ...
        self.grid(row = 0, column = 0, sticky="nsew")