【问题标题】:Tkinter : Button in frame not visibleTkinter:框架中的按钮不可见
【发布时间】:2016-10-20 15:02:06
【问题描述】:

我正在尝试实现井字游戏程序。我是python的绝对初学者。看了很多教程,看了几本书,对Python的基础有了一定的了解。我试图让按钮显示在一个框架中,但我得到的只是一个空白窗口。

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) 让它工作。如果解释为什么需要这样做会很有帮助?谢谢。
  • 好的,我会在几分钟后发布答案。

标签: python python-2.7 tkinter tic-tac-toe


【解决方案1】:

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

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

使用“星号”导入不是一个好主意。它们使代码更难阅读,并且使用导入模块中定义的所有名称(在 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()

【讨论】:

  • 非常感谢您的这篇文章!非常有帮助!
  • @ms:我的荣幸!祝你的程序好运。您可能会发现使用.grid 方法而不是.pack 构建井字游戏网格更容易。
  • 是的,我已经知道了。一旦我开始实施游戏部分,我肯定会遇到很多困难。希望 SO 能帮助我度过难关:D 再次感谢!
【解决方案2】:

好的,问题是我需要在代码末尾添加一个变量。像 b=Buttons(root) 这样的东西。它现在正在工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    相关资源
    最近更新 更多