我制作了一个程序,用于框架打开新的"页面"。在第135行,我想在antmengen.get()==0
等时打开课程。但它不起作用。我没有错误,新页面没有出现。我如何打开"课程?感谢。
import tkinter as tk
from tkinter import *
import random
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container= tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames={}
for F in (fenster, auswahl, information1, information2, mode1, mode2, scale0, scale1):
frame= F(container, self)
self.frames[F]=frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(fenster)
def show_frame(self, c):
frame=self.frames[c]
frame.tkraise()
class fenster(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label=tk.Label(self, text="Das ist die Startseite")
label.pack(side="top", fill="x", pady=10)
button=tk.Button(self, text="Start",
command=lambda: controller.show_frame(auswahl))
button.pack()
class auswahl(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
infbutton1=tk.Button(self, text="Information zu 1",
command=lambda: controller.show_frame(information1))
infbutton1.pack()
infbutton2=tk.Button(self, text="Information zu 2",
command=lambda: controller.show_frame(information2))
infbutton2.pack()
mode1button=tk.Button(self, text="Modus 1",
command=lambda: controller.show_frame(mode1))
mode1button.pack()
mode2button=tk.Button(self, text="Modus 2",
command=lambda: controller.show_frame(mode2))
mode2button.pack()
class information1(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label=tk.Label(self, text="In diesem Modus gibt es 5 schon vorgegebene Antworten, die auf Ihre Fragen 'antworten'!")
label.pack(side="top", fill="x", pady=10)
button=tk.Button(self, text="Zurück",
command=lambda: controller.show_frame(auswahl))
button.pack()
class information2(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label=tk.Label(self, text="In diesem Modus gibt es 5 schon vorgegebene Antworten, die auf Ihre Fragen 'antworten'!")
label.pack(side="top", fill="x", pady=10)
button=tk.Button(self, text="Zurück",
command=lambda: controller.show_frame(auswahl))
button.pack()
class mode1(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label=tk.Label(self, text= "Stellen Sie eine beliebige Frage. Wenn Sie bereit sind drücken Sie auf 'OK'") #Text1/Label für mode1
label.pack(side="top", fill="x", pady=10)
def ok():
a=random.randint(1,5)
if a==1:
label=Label(text="Ja") #Label antworten für mode1
label.pack(side="top", fill="x", pady=10)
elif a==2:
label=Label(text="Nein")
label.pack(side="top", fill="x", pady=10)
elif a==3:
label=Label(text="Vielleicht")
label.pack(side="top", fill="x", pady=10)
elif a==4:
label=Label(text="Auf jeden Fall")
label.pack(side="top", fill="x", pady=10)
elif a==5:
label=Label(text="Auf keinen Fall")
label.pack(side="top", fill="x", pady=10)
okknopf=Button(self, text="OK", command=ok) #Der ok-Knopf
okknopf.pack()
button=tk.Button(self, text="Zurück",
command=lambda: controller.show_frame(auswahl))
button.pack()
class mode2(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label=Label(self, text="Suchen Sie sich aus, wie viele Wörter Sie haben möchten!")
label.pack()
def antmenge(self):
mant["text"]="Mögliche Antworten: " \
+ str(antmengen.get()) + " "
mant=Label(self, text="Mögliche Antworten: 0 Wörter", width=25)
mant.pack()
antmengen=IntVar()
antmengen.set(0)
antm=Scale(self, width=20, length=200, orient="vertical", from_=0, to=1,
resolution=1, tickinterval=10, label="Wörter", command=antmenge(self),
variable=antmengen)
antm.pack()
button=tk.Button(self, text="Zurück",
command=lambda: controller.show_frame(auswahl))
button.pack()
button1=tk.Button(self, text="Ok", command=antmenge(self))
button1.pack()
if antmengen.get()==0:
scale0(parent, controller)
elif antmengen.get()==1:
scale1(parent, controller)
class scale0(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label=tk.Label(self, text="Es muss mindestens eine Antwort sein")
label.pack(side="top", fill="x", pady=10)
button=tk.Button(self, text="Zurück",
command=lambda: controller.show_frame(mode2))
button.pack()
class scale1(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label=tk.Label(self, text="Wort1")
label.pack(side="top", fill="x", pady=10)
wort1auf=Entry(self)
wort1auf.pack()
def ok3():
a=random.randint(1,1)
if a==1:
label2ant1=Label(self, text=" ") #Label antworten für mode1
label2ant1.pack()
def wort1aufein():
label2ant1.configure(text=(wort1auf.get()))
wort1aufein()
button1=Button(self, text="Antworten", command=ok3)
button1.pack()
button=tk.Button(self, text="Zurück",
command=lambda: controller.show_frame(mode2))
button.pack()
if __name__== "__main__":
app=SampleApp()
app.mainloop()
答案 0 :(得分:0)
我在print
之后添加if antmengen.get()==0:
,所以我看到在启动程序后立即调用if antmengen.get()==0:
。
我认为你必须重新设计节目,因为:
-
如果我添加.grid()
scale0(parent, controller).grid()
然后我用Start
按钮在框架中得到这个框架。
-
如果我添加.pack()
并将parent
更改为self
scale0(self, controller).pack()
然后我立即在Scale
窗口小部件的框架内得到这个框架。
答案 1 :(得分:0)
问题是你正在创建比例的实例,但是你没有将它添加到窗口。
看看这一行:
if antmengen.get()==0:
scale0(parent, controller)
在这里,您要创建scale0
的实例,它是框架的子类。但是,您无法在此实例上致电pack
或grid
或place
。由于parent
中的其他小部件使用网格,您应该执行以下操作:
if antmengen.get()==0:
s=scale0(parent, controller)
s.grid(...)
你将它作为一个类的一部分创建它似乎很奇怪,但是给它一个除了类之外的父窗口小部件,所以也许另一个错误是第一个参数应该是self
而不是{{1} }。如果您将父级更改为parent
,则需要从self
切换到grid
,因为这是该类中其他小部件使用的内容。