按钮/标签未显示在新窗口中(Python tkinter)

时间:2018-08-11 17:18:34

标签: python-3.x tkinter

当我单击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()

1 个答案:

答案 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, ...) 添加到其他按钮上,它们会显示出来。