没有堆叠的框架()

时间:2018-01-12 15:46:47

标签: python python-2.7 user-interface tkinter

我正在尝试创建一个程序,用户使用" Next"来浏览屏幕。和"以前"纽扣。编辑所选答案here中的代码我已经生成了以下代码:

import Tkinter as tk
import tkFont as tkfont        

def cancel():
    root.destroy()

def disable_event():
    pass

#Set the parent (main/root) window
root = tk.Tk()
root.title("Some title")
root.geometry('700x500') #Width x Height
root.resizable(0, 0) #Make root unresizable and force the use of "Cancel" button
root.protocol("WM_DELETE_WINDOW", disable_event)


class InstallerApp(tk.Tk):
    def __init__(self, *args, **kwargs):

        self.title_font = tkfont.Font(family='Helvetica', size=18)
        container = tk.Frame(root)
        container.pack(side="top", fill="both", expand=True)
        self.frames = {}
        for F in (Intro, FirstPage):
            page_name = F.__name__
            frame = F(parent=container, controller=self)
            self.frames[page_name] = frame
        self.show_frame("Intro")

    def show_frame(self, page_name):
        frame = self.frames[page_name]
        frame.tkraise()

class Intro(tk.Frame):
    def __init__(self, parent, controller):
        Intro = tk.Frame.__init__(self, parent)
        self.controller = controller
        leftFrame = tk.Frame(Intro, height=500, width=250, bg="#000000")
        leftFrame.pack(side="left")
        middleFrame = tk.Frame(Intro, height=500, width=5)
        middleFrame.pack(side="left")
        rightFrame = tk.Frame(Intro, height=500, width=450, bg="#FFFFFF")

        buttonFrame = tk.Frame(Intro, height=35, width=450, bg="#FFFFFF")
        nextButton = tk.Button(buttonFrame, width=10, text="Next >", command=lambda: controller.show_frame("FirstPage")).grid(row=0, column=0)
        div3 = tk.Frame(buttonFrame, bg="#FFFFFF", width=10).grid(row=0, column=1)
        cancelButton = tk.Button(buttonFrame, text="Cancel", width=10, command=cancel).grid(row=0,column=2)
        buttonFrame.pack_propagate(False)
        buttonFrame.pack(side="bottom")
        #Other child widgets to rightFrame managed by pack

        rightFrame.pack_propagate(False)
        rightFrame.pack_forget()
        rightFrame.pack(side="right")

class FirstPage(tk.Frame):
        #the same code with "previousButton"

然而,当我执行代码时,我注意到即使调用了show_frame函数,FirstPage也没有出现,如果我调整主窗口的大小,它会逐渐从简介后面出现。当我运行原始代码时,它完美地运行。

问题是因为我使用的是pack()经理而原始代码使用grid()或者是什么?有人可以提供示例代码吗?

P.S。:我见过其他问题,但他们都使用grid()。我使用的是python 2.7。

1 个答案:

答案 0 :(得分:1)

您根本无法使用pack将一个小部件叠加在另一个小部件中。这不是pack可以做的事情。 pack明确设计为将小部件放置在同一主服务器中现有小部件上方,下方或侧面的未分配空间中。

如果您想将帧叠加在一起,则需要使用gridplace