小部件未显示在 Tkinter GUI 中

我创建了代码,以便为我正在开发的井字游戏程序显示一个 3x3 的按钮网格。网格以前工作过,但是当我尝试将代码放入一个类中时,当我尝试运行该程序时,我只会得到一个空白屏幕。这是我的代码:


from tkinter import *


buttons = {".!frame.!button": 0,

           ".!frame.!button2": 1,

           ".!frame.!button3": 2,

           ".!frame.!button4": 3,

           ".!frame.!button5": 4,

           ".!frame.!button6": 5,

           ".!frame.!button7": 6,

           ".!frame.!button8": 7,

           ".!frame.!button9": 8,

           }


class GameBoard:


    def __init__(self, master):

        self.field = Frame(master)

        self.field.grid


        self.b1 = Button(self.field, text="-")

        self.b1.bind("<Button-1>", self.setfield)

        self.b1.grid(row=0, column=0)


        self.b2 = Button(self.field, text="-")

        self.b2.bind("<Button-1>", self.setfield)

        self.b2.grid(row=0, column=1)


        self.b3 = Button(self.field, text="-")

        self.b3.bind("<Button-1>", self.setfield)

        self.b3.grid(row=0, column=2)


        self.b4 = Button(self.field, text="-")

        self.b4.bind("<Button-1>", self.setfield)

        self.b4.grid(row=1, column=0)


        self.b5 = Button(self.field, text="-")

        self.b5.bind("<Button-1>", self.setfield)

        self.b5.grid(row=1, column=1)


        self.b6 = Button(self.field, text="-")

        self.b6.bind("<Button-1>", self.setfield)

        self.b6.grid(row=1, column=2)


        self.b7 = Button(self.field, text="-")

        self.b7.bind("<Button-1>", self.setfield)

        self.b7.grid(row=2, column=0)


        self.b8 = Button(self.field, text="-")

        self.b8.bind("<Button-1>", self.setfield)

        self.b8.grid(row=2, column=1)


        self.b9 = Button(self.field, text="-")

        self.b9.bind("<Button-1>", self.setfield)

        self.b9.grid(row=2, column=2)


    def setfield(self, event):

        print(buttons[str(event.widget)])




root = Tk()


board = GameBoard(root)


root.mainloop()

有人能帮我找出为什么我在运行程序时得到一个空帧吗?


犯罪嫌疑人X
浏览 128回答 1
1回答

SMILET

有人能帮我找出为什么我在运行程序时得到一个空帧吗?这是因为您没有将其添加到窗口中。考虑这个代码:self.field.grid它绝对没有任何作用。要显示该窗口,您必须调用该函数:self.field.grid()在我看来,一个类永远不应该调用gridorpack或placeon 自身。那应该是调用者的工作。进入是一个好习惯,因为它促进了代码重用。我个人会删除该行并将最后几行更改为:board&nbsp;=&nbsp;GameBoard(root) board.grid()&nbsp;#&nbsp;or&nbsp;board.pack(...)你正在为自己做太多的工作。您可以将参数传递给回调。例如:self.b1&nbsp;=&nbsp;Button(self.field,&nbsp;text="-",&nbsp;command=lambda:&nbsp;setfield(1))这样,您的回调将使用参数调用1,您无需进行任何类型的查找。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python