【问题标题】:Can not add Button with grid to list in tkinter无法在 tkinter 中添加带网格的按钮以列出
【发布时间】:2018-12-01 21:17:44
【问题描述】:

我想用 tkinter 安排这样的按钮:

这适用于以下代码:

from tkinter import *

root = Tk()
root.title("Tic Tac Toe")

btn = []

def btnClicked (btnNum):
    print(btnNum)

b=0
for a in range(9):
    if(a%3 == False):
        b = b+1
    btn.append(Button(root, text="", command = lambda c=a: btnClicked(c), height = 10, width = 20).grid(row = a-3*(b-1), column=b))

root.mainloop()

但是,为了对这些按钮执行操作,我需要将它们打包,如下所示:

from tkinter import *

root = Tk()
root.title("Tic Tac Toe")

btn = []

def btnClicked (btnNum):
    print(btnNum)
    btn[btnNum]["text"] = "X"

b=0
for a in range(9):
    if(a%3 == False):
        b = b+1
    btn.append(Button(root, text="", command = lambda c=a: btnClicked(c), height = 10, width = 20).grid(row = a-3*(b-1), column=b))
    btn[a].pack()

root.mainloop()

当我运行此代码时,我收到以下错误:

AttributeError: 'NoneType' 对象没有属性 'pack'

虽然此代码有效,但我不希望在网格中排列按钮时使用它,如下所示:

from tkinter import *

root = Tk()
root.title("Tic Tac Toe")

btn = []

def btnClicked (btnNum):
    print(btnNum)
    btn[btnNum]["text"] = "X"

b=0
for a in range(9):
    if(a%3 == False):
        b = b+1
    btn.append(Button(root, text="", command = lambda c=a: btnClicked(c), height = 10, width = 20))
    btn[a].pack()

root.mainloop()

如何消除第二个代码示例中的错误或在第三个示例中分别对齐网格中的按钮?

【问题讨论】:

    标签: python python-3.x tkinter


    【解决方案1】:

    以下是您的代码存在的问题及其解决方案。

    1. 您不需要使用两个变量 ab。您可以使用 modulus (a//3) 和 remainder (a%3) 只使用一个。

    2. 如果您曾经打印出btn 列表,您将立即意识到问题所在。它由None 组成,只是因为您在对按钮执行grid 操作后追加,返回None。您需要先附加小部件,然后将其“网格化”。

    所以,这里是工作代码。

    from tkinter import *
    
    root = Tk()
    root.title("Tic Tac Toe")
    
    btn = []
    
    def btnClicked(btnNum):
        print(btnNum)
        btn[btnNum]["text"] = "X"
    
    for a in range(9):
        btn.append(Button(root, text="", command = lambda c=a: btnClicked(c), height = 10, width = 20))
        btn[-1].grid(row = a%3, column=a//3)
    
    root.mainloop()
    

    【讨论】:

      猜你喜欢
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 2019-01-20
      • 1970-01-01
      • 2017-01-19
      相关资源
      最近更新 更多