我正在尝试创建一个程序,用户使用" 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。
答案 0 :(得分:1)
您根本无法使用pack
将一个小部件叠加在另一个小部件中。这不是pack
可以做的事情。 pack
明确设计为将小部件放置在同一主服务器中现有小部件上方,下方或侧面的未分配空间中。
如果您想将帧叠加在一起,则需要使用grid
或place
。