[英]Python 3.4 Tkinter: Frames and Command issues
因此,在我的代码中,我正在尝试在第一帧(徽标页面)上创建一个按钮,以便在单击时关闭该帧然后打开另一个帧(Intro Fight)。 但是,当前按下按钮时,第一帧被删除,但下一帧不显示,留下一个空白窗口。 我认为正在发生的是下一帧出现,但由于所有小部件都是在帧被打包之前打包的,所以它们不会出现。 我怎样才能将所有应该出现在下一帧中的小部件显示出来? 这是代码。
############################## GUI GAME ############################# from tkinter import * ############################## PROGRAM ############################# class MyApp: def __init__(self,parent): ################################## LOGO PAGE ############################### self.myParent=parent Pic1 = PhotoImage(file="../Python STUFF/RestLogo.gif") #logo Pic2 = PhotoImage(file="../Python STUFF/IntroBattle.gif") #Intro Battle self.LogoFrame=Frame(parent) self.LogoFrame.pack() self.b1=Button(self.LogoFrame, text=('Continue'),command = self.showIntro) self.b1.pack(side='bottom') self.w1 = Label(self.LogoFrame, image = Pic1) self.w1.image=Pic1 self.w1.pack(side='top') ################################### INTRO FIGHT ############################# self.IntroFrame=Frame(parent) self.IntroBG=Label(self.IntroFrame, image=Pic2) self.IntroBG.image=Pic2 self.IntroBG.place(x=0,y=0) self.text=Message(self.IntroFrame, fg='black',text="""Flaming Arrows whizz over your hair, War rages around you. Suddenly, it charges at you. A 8 foot tall mechanical beast the enemy have been training for war. You have no chance but to fight it. You swing your sword as hard as you can...Only to leave a minor dent on it's armor. With one blow from its club, you fall unconscious.""" , font='Times 15 bold') self.text.place(x=70, y=50) self.FinishSlide1=Button(self.IntroFrame, text='Next', command = self.WakingUp, width=10) self.FinishSlide1.place(x=500, y=700) def WakingUp(self): #Closes game for now root.destroy() def showIntro(self): #Transition into Intro Fight frame. self.LogoFrame.destroy() self.IntroFrame.place(x=0, y=0) print ('\\n'*100) #Clear Screen root = Tk() myapp=MyApp(root) root.title('GUI GAME') root.mainloop()
如果我正确理解问题,你只需要这样做。
def createIntroFightFrame(self):
self.IntroFrame=Frame(self.myParent) # Notice I'm using self.myParent here
self.IntroFrame.place(x=0, y=0) # Place this here instead of in `showIntro()`
self.IntroBG=Label(self.IntroFrame, image=Pic2)
self.IntroBG.image=Pic2
self.IntroBG.place(x=0,y=0)
self.text=Message(self.IntroFrame, fg='black',text="""Flaming Arrows whizz over your hair, War rages around you. Suddenly, it charges at you. A 8 foot tall mechanical beast the enemy have been training for war. You have no chance but to fight it. You swing your sword as hard as you can...Only to leave a minor dent on it's armor. With one blow from its club, you fall unconscious."""
, font='Times 15 bold')
self.text.place(x=70, y=50)
self.FinishSlide1=Button(self.IntroFrame, text='Next', command = self.WakingUp, width=10)
self.FinishSlide1.place(x=500, y=700)
然后,这样称呼它:
def showIntro(self): #Transition into Intro Fight frame.
self.LogoFrame.destroy()
self.createIntroFightFrame()
@Marcin似乎熟悉Tkinter。 我从来没有使用它,所以我不知道它的特点或涉及的具体方法。 如果我在上下文中没有意义,请参考他的回答。
这似乎是因为您使用场所几何管理器。 我改变它打包一个,它似乎按预期工作。 我还从下面的代码中删除了图像,因为我没有你的图像文件,无法运行它。
############################## GUI GAME #############################
from tkinter import *
############################## PROGRAM #############################
class MyApp:
def __init__(self,parent):
################################## LOGO PAGE ###############################
self.myParent=parent
#Pic1 = PhotoImage(file="../Python STUFF/RestLogo.gif") #logo
#Pic2 = PhotoImage(file="../Python STUFF/IntroBattle.gif") #Intro Battle
self.LogoFrame=Frame(parent)
self.LogoFrame.pack()
self.b1=Button(self.LogoFrame, text=('Continue'),command = self.showIntro)
self.b1.pack(side='bottom')
self.w1 = Label(self.LogoFrame)
#self.w1.image=Pic1
self.w1.pack(side='top')
################################### INTRO FIGHT #############################
self.IntroFrame=Frame(parent)
self.IntroBG=Label(self.IntroFrame)
#self.IntroBG.image=Pic2
#self.IntroBG.place(x=0,y=0)
self.IntroBG.pack()
self.text=Message(self.IntroFrame, fg='black',text="""Flaming Arrows whizz over your hair, War rages around you. Suddenly, it charges at you. A 8 foot tall mechanical beast the enemy have been training for war. You have no chance but to fight it. You swing your sword as hard as you can...Only to leave a minor dent on it's armor. With one blow from its club, you fall unconscious."""
,font='Times 15 bold')
#self.text.place(x=70, y=50)
self.text.pack()
self.FinishSlide1=Button(self.IntroFrame, text='Next', command = self.WakingUp, width=10)
#self.FinishSlide1.place(x=500, y=700)
self.FinishSlide1.pack()
def WakingUp(self): #Closes game for now
root.destroy()
def showIntro(self): #Transition into Intro Fight frame.
self.LogoFrame.destroy()
#self.IntroFrame.place(x=0, y=0)
self.IntroFrame.pack()
print ('\n'*100) #Clear Screen
root = Tk()
myapp=MyApp(root)
root.title('GUI GAME')
root.mainloop()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.