当我单击Tic Tac Toe Button时,应该会启动一个新窗口,它会显示但不显示按钮,并且不会出现任何错误。
这两段代码位于两个不同的脚本中。
当我用自己的脚本运行Tic Tac Toe时,它将运行并显示所有按钮。
import tkinter as tk
import hangman
import playgame
class GAME_APP(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 = {}
F=StartPage
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
label = tk.Label(self, text="GAME APP", font=('Ravie',50,'bold italic'),fg='Dark Blue',bg='Light Pink',padx=20,pady=10,justify='center')
label.grid(padx=80,pady=50)
button = tk.Button(self, text="Tic Tac Toe",bg='Light Green',fg='Purple',bd=8,justify='center',font=('Broadway',18,'bold italic'),command=self.TTT)
button.grid(padx=30,pady=30)
button2 = tk.Button(self, text="Hangman",bg='Light Green',fg='Purple',bd=8,justify='center',font=('Broadway',18,'bold italic'),command=self.hangman_win)
button2.grid(padx=30,pady=30)
def hangman_win(self):
bb=hangman.mainwindow()
def TTT(self):
tt=playgame.GUI()
app=GAME_APP()
app.title('Game App')
app.geometry('700x500')
app.mainloop()
这是井字游戏(Tic Tac Toe)的GUI(最初有9个按钮,但是为了使代码简短,将其删除了。)
class GUI(playGame):
def __init__(self):
import tkinter as tk
self.home=tk.Tk()
self.home.title("Tic Tac Toe")
self.home.geometry("160x300")
w,h=6,3
self.c1r1=tk.Button(text='',width=w, height=h, command=lambda: self.userTurn(self.c1r1))
self.c1r1.pack()
self.c1r2=tk.Button(text='',width=w, height=h, command=lambda: self.userTurn(self.c1r2))
self.c1r2.pack()
self.announce=tk.Label(text='No winner yet',width=w, height=h)
self.announce.pack()
self.home.mainloop()
答案 0 :(得分:0)
问题是按钮和标签没有Start()
参数。 master
是指将在其中显示窗口小部件的父窗口。
例如。第一个按钮:
master
您已按照self.c1r1=tk.Button(text='',width=w, height=h, ...)
格式对此进行了定义。
名称为name, widget type, (options...)
,小部件类型为c1r1
,选项为tk.Button
等...
但是,小部件的正确格式是text, width, height
。
由于按钮的父窗口被定义为'name, widget type (master, options...)
',因此该窗口中定义的所有小部件都需要引用此父窗口来代替self.home=tk.Tk()
参数。
因此,考虑到这一点,您的第一个按钮现在将定义为:
master
请确保将self.c1r1=tk.Button(self.home, text='',width=w, height=h, ...)
添加到其他按钮上,它们会显示出来。