Tkinter:在框架类中创建多个框架

时间:2018-01-05 23:39:30

标签: python python-3.x gridview tkinter frame

我遇到一个问题,我无法在给定的帧内创建多个不同的帧。这只是我整个应用程序的一小部分,但基本上我将不同的Frame分成了类,我根据情况调用这些类。

我正在寻找的是如何在此框架类中创建2个或更多帧。截至目前,不会创建不同的帧,因此当将它们放置在网格中时,它们会重叠并相互替换。 (即frame2.label与frame1.label重叠)

class MainPage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)

        #First frame inside the current MainPage Window Frame
        frame1 = Frame(self, bg = "red")
        frame1.grid(row = 0, column = 0, sticky = W)

        frame1.label = tk.Label(self, text="Main Page", font=SMALL_FONT)
        frame1.label.grid(row = 0, column = 0, sticky = W)

        itemScanNumber = StringVar()    
        frame1.EntryBox = ttk.Entry(self, textvariable = itemScanNumber) 
        frame1.EntryBox.grid(row = 0, column = 1, sticky = W)

        print(itemScanNumber.get())

        def printNumber():
            print("Your Number: " + itemScanNumber.get())
            return

        frame1.button = ttk.Button(self, text = "CLICK ME FOR SCAN NUMBER!", command = printNumber)
        frame1.button.grid(row = 0, column = 2, sticky = W)

        frame1.button1 = ttk.Button(self, text = "CLICK ME!", command = lambda: controller.show_frame(MasterFilePage))
        frame1.button1.grid(row = 0, column = 3, sticky = W)


        #Second frame inside the current MainPage Window Frame
        frame2 = Frame(self, bg = "blue")
        frame2.grid(row = 1, column = 0, sticky = W)

        frame2.label = tk.Label(self, text="Main Page2", font=SMALL_FONT)
        frame2.label.grid(row = 0, column = 0, sticky = W)

1 个答案:

答案 0 :(得分:0)

您已成功在MainPage框架内放置两个框架。问题是你还要在其中放置一堆其他小部件,并且你将它们中的一些放在与帧相同的行和列中。

要使小部件位于框架内,您需要提供框架作为父级。例如:

    frame1.label = tk.Label(frame1, ...) 
    frame1.EntryBox = ttk.Entry(frame1, ...) 
    frame1.button = ttk.Button(frame1, ...)
    frame1.button1 = ttk.Button(frame1, ...)
    frame2.label = tk.Label(frame2, ...)