Python Tkinter:如何在页面上显示带有按钮的页面?

Python Tkinter:如何在页面上显示带有按钮的页面?,python,tkinter,Python,Tkinter,我正在为一个欺凌/虐待项目写一个“热线”程序,有4个页面:主页/欺凌/虐待/其他和一个顶栏。我把按钮转到其他页面,但每次都有不同的错误 我已经尝试了页面和容器中的lift命令,以及中编程的show命令。两者都不起作用。(顺便说一句,代码不全是我写的,大部分都是来自Caspar Wylie的问题) 将tkinter作为tk导入 类页面(tk.Frame): 定义初始化(self,*args,**kwargs): tk.Frame.\uuuu init\uuuuu(self,*args,**kwar

我正在为一个欺凌/虐待项目写一个“热线”程序,有4个页面:主页/欺凌/虐待/其他和一个顶栏。我把按钮转到其他页面,但每次都有不同的错误

我已经尝试了页面和容器中的lift命令,以及中编程的show命令。两者都不起作用。(顺便说一句,代码不全是我写的,大部分都是来自Caspar Wylie的问题)

将tkinter作为tk导入
类页面(tk.Frame):
定义初始化(self,*args,**kwargs):
tk.Frame.\uuuu init\uuuuu(self,*args,**kwargs)
def显示(自我):
自我提升
班级第1页(第页):
定义初始化(self,*args,**kwargs):
第页.uuu初始(self,*args,**kwargs)
label=tk.label(self,text=“欢迎使用帮助热线!请选择您的关注点。”,relief='groove')
label.grid(行=0,列=1,列span=3,粘性='nesw',padx=5,pady=5)
bullybutton=tk.Button(self,text=“Bullying”,command=MainView.p2.lift)
grid(行=1,列=1,padx=5,pady=5,粘性='nsew')
abusebutton=tk.Button(self,text=“滥用”,command=MainView.p3.lift)
网格(行=1,列=2,padx=5,pady=5,粘性='nsew')
otherbutton=tk.Button(self,text=“Other”,command=MainView.p4.lift)
网格(行=1,列=3,padx=5,pady=5,粘性='nsew')
班级第2页(第页):
定义初始化(self,*args,**kwargs):
第页.uuu初始(self,*args,**kwargs)
label=tk.label(self,text=“这是第2页”)
label.grid(行=0,列=1,粘性='nesw',padx=5,pady=5)
班级第3页(第页):
定义初始化(self,*args,**kwargs):
第页.uuu初始(self,*args,**kwargs)
label=tk.label(self,text=“这是第3页”)
label.grid(行=0,列=1,粘性='nesw',padx=5,pady=5)
班级第4页(第页):
定义初始化(self,*args,**kwargs):
第页.uuu初始(self,*args,**kwargs)
label=tk.label(self,text=“这是第4页”)
label.grid(行=0,列=1,粘性='nesw',padx=5,pady=5)
类主视图(tk.Frame):
定义初始化(self,*args,**kwargs):
tk.Frame.\uuuu init\uuuuu(self,*args,**kwargs)
p1=第1页(自我)
p2=第2页(自我)
p3=第3页(自我)
p4=第4页(自我)
容器=tk.框架(自身)
container.pack(side=“top”,fill=“both”,expand=True)
p1.放置(在容器中,x=0,y=0,relwidth=1,relheight=1)
p2.放置(在容器中,x=0,y=0,relwidth=1,relheight=1)
p3.放置(在容器中,x=0,y=0,relwidth=1,relheight=1)
p4.放置(在容器中,x=0,y=0,relwidth=1,relheight=1)
菜单栏=tk.菜单(根)
filemenu=tk.Menu(menubar,tearoff=0)
filemenu.add_命令(label=“Home”,command=p1.lift)
filemenu.add_命令(label=“Bullying”,command=p2.lift)
filemenu.add_命令(label=“滥用”,command=p3.lift)
filemenu.add_命令(label=“Other”,command=p4.lift)
filemenu.add_separator()
filemenu.add_命令(label=“Quit”,command=exit)
菜单栏.add_级联(label=“Navigate”,menu=filemenu)
root.config(menu=menubar)
p1.show()
root=tk.tk()
根几何体('500x500')
main=MainView(根目录)
main.pack(side=“top”,fill=“both”,expand=True)
root.title(“欺凌和虐待热线”)
root.mainloop()
我希望有3个按钮,每个按钮都指向自己的页面,但是我得到了一个关于“无属性tk”或“缺少参数self”的错误,或者根本没有任何更改。

这里对您的代码进行了一次(相当大的)修改,我认为它可以满足您的要求。你没有提供Caspar Wylie问题的链接,所以我大量借鉴了Bryan Oakley的《问题的精髓》中所展示的技巧,虽然没有菜单,但也有非常相似的功能(但最后确实包含了许多可能非常有用的链接)

更新

我自己找到了Caspar Wylie的问题,并在你的问题中添加了链接,并稍微修改了下面的代码,使其与相关答案更加一致(这恰好也是Bryan编写的)

将tkinter作为tk导入
类主视图(tk.Frame):
定义初始化(自、父、*args、**kwargs):
super()
容器=tk.框架(自身)
container.pack(side='top',fill='both',expand=True)
#创建页面(框架子类)实例的字典。
self.pages={}
对于页面输入(主页、欺凌、虐待、其他):
页面=页面(容器、控制器=自身)
self.pages[页面名称]=页面
页面位置(在容器中,x=0,y=0,relwidth=1,relheight=1)
菜单栏=传统菜单(父菜单)
filemenu=tk.Menu(menubar,tearoff=0)
def选项(页面名称,show=self.show):#助手函数。
返回dict(label=page\u name,command=lambda:show(page\u name))
filemenu.add_命令(**options('Home'))
filemenu.add_命令(**选项(“欺凌”))
filemenu.add_命令(**选项(“滥用”))
filemenu.add_命令(**选项('Other'))
filemenu.add_separator()
filemenu.add_命令(label='Quit',command=exit)
菜单栏.add_级联(label='Navigate',menu=filemenu)
parent.config(menu=menubar)
self.show('Home')#显示初始页面。
def显示(自身,页面名称):
self.pages[页面名称].lift()
班级主页(传统框架):
定义初始化(自、父、控制器):
super()。\uuuu init\uuuu(父级)
label=tk.label(self,text='欢迎使用帮助热线!'
“请选择您的关注点。”,relief='groove')
label.grid(行=0,列=1,列span=3,粘性=nesw',padx=5,pady=5)
def选项(页面名称,show=controller.show):#Helper func。
返回dict(text=page\u name,command=lambda:show(page\u name))
欺负按钮=tk