Tkinter:框架中的按钮不可见

Tkinter : Button in frame not visible

我正在尝试实现一个 TicTacToe 程序。我是 python 的绝对初学者。看了很多教程,看了几本书,基本了解了Python。我试图让按钮显示在一个框架中,但我得到的只是一个空白 window.

link for image of the resultant window

这是我目前的代码:

from Tkinter import *

class Buttons(object):

    def __init__(self,master):
        frame = Frame(master)
        frame.pack()

        self.button1= Button(frame,text="1",height=4,width=8,command=self.move)
        self.button1.pack(side=LEFT)

        self.button2= Button(frame,text="2",height=4,width=8,command=self.move)
        self.button2.pack(side=LEFT)

        self.button3= Button(frame,text="3",height=4,width=8,command=self.move)
        self.button3.pack(side=LEFT)


root = Tk()
root=mainloop()

好的,问题是我需要在代码末尾添加一个变量。像 b=Buttons(root) 这样的东西。现在可以使用了。

您定义了 Buttons class,但没有创建 class 的实例,因此实际上没有构建任何按钮。另外,您有错字/语法错误:

root=mainloop()

应该是

root.mainloop()

此外,您没有定义 move 回调方法。

这是您的代码的修复版本:

from Tkinter import *

class Buttons(object):

    def __init__(self,master):
        frame = Frame(master)
        frame.pack()

        self.button1 = Button(frame, text="1", height=4, width=8, command=self.move)
        self.button1.pack(side=LEFT)

        self.button2 = Button(frame, text="2", height=4, width=8, command=self.move)
        self.button2.pack(side=LEFT)

        self.button3 = Button(frame, text="3", height=4, width=8, command=self.move)
        self.button3.pack(side=LEFT)

    def move(self):
        print "click!"

root = Tk()
Buttons(root)
root.mainloop()

但是,这仍然有一个问题:move 方法无法知道哪个按钮调用了它。这是解决该问题的一种方法。我也改了

from Tkinter import *

import tkinter as tk

使用 "star" 导入不是一个好主意。它们使代码更难阅读,并且用导入模块中定义的所有名称(在 Tkinter 中有 175 个名称)污染您的命名空间,这可能导致名称冲突。

import Tkinter as tk

class Buttons(object):

    def __init__(self,master):
        frame = tk.Frame(master)
        frame.pack()

        self.buttons = []
        for i in range(1, 4):
            button = tk.Button(
                frame, text=i, height=4, width=8, 
                command=lambda n=i:self.move(n)
            )
            button.pack(side=tk.LEFT)
            self.buttons.append(button)

    def move(self, n):
        print "click", n

root = tk.Tk()
Buttons(root)
root.mainloop()