0

我目前正在学习 tkinter 并编写了一个代码,该代码创建了一个由 100 个按钮组成的网格,当单击它时它会消失(我还没有编写代码)。但是,如下所示,它确实效率低下。有没有什么办法可以让我写得更好更快,因为我已经用 1a,1b 对每个按钮进行了编码......我想知道是否有更好的方法来做到这一点。该项目的目标是创建一个 10*10 的板,每个方块上都有按钮,点击后它们会消失。

# !/bin/python3
from tkinter import *
from PIL import ImageTk,Image

root = Tk()
root.title("Battleships")


def buttonClick():
    COMMAND= True
    if COMMAND == True:
        del button1a

    
# Creating the buttons
image1 = ImageTk.PhotoImage(Image.open("/home/lukas/Downloads/Battleships boats/AircraftCarrier.png"))
label1 = Label(image=image1)
label1.place(x=40, y=10)
button1a = Button(root, text="", padx=20, pady=10, command=buttonClick) 
button1b = Button(root, text="", padx=20, pady=10, command=buttonClick)
button1c = Button(root, text="", padx=20, pady=10, command=buttonClick)
button1d = Button(root, text="", padx=20, pady=10, command=buttonClick)
button1e = Button(root, text="", padx=20, pady=10, command=buttonClick)
button1f = Button(root, text="", padx=20, pady=10, command=buttonClick)
button1g = Button(root, text="", padx=20, pady=10, command=buttonClick)
button1h = Button(root, text="", padx=20, pady=10, command=buttonClick)
button1i = Button(root, text="", padx=20, pady=10, command=buttonClick)
button1j = Button(root, text="", padx=20, pady=10, command=buttonClick)
button2a = Button(root, text="", padx=20, pady=10, command=buttonClick)
button2b = Button(root, text="", padx=20, pady=10, command=buttonClick)
button2c = Button(root, text="", padx=20, pady=10, command=buttonClick)
button2d = Button(root, text="", padx=20, pady=10, command=buttonClick)
button2e = Button(root, text="", padx=20, pady=10, command=buttonClick)
button2f = Button(root, text="", padx=20, pady=10, command=buttonClick)
button2g = Button(root, text="", padx=20, pady=10, command=buttonClick)
button2h = Button(root, text="", padx=20, pady=10, command=buttonClick)
button2i = Button(root, text="", padx=20, pady=10, command=buttonClick)
button2j = Button(root, text="", padx=20, pady=10, command=buttonClick)
button3a = Button(root, text="", padx=20, pady=10, command=buttonClick)
button3b = Button(root, text="", padx=20, pady=10, command=buttonClick)
button3c = Button(root, text="", padx=20, pady=10, command=buttonClick)
button3d = Button(root, text="", padx=20, pady=10, command=buttonClick)
button3e = Button(root, text="", padx=20, pady=10, command=buttonClick)
button3f = Button(root, text="", padx=20, pady=10, command=buttonClick)
button3g = Button(root, text="", padx=20, pady=10, command=buttonClick)
button3h = Button(root, text="", padx=20, pady=10, command=buttonClick)
button3i = Button(root, text="", padx=20, pady=10, command=buttonClick)
button3j = Button(root, text="", padx=20, pady=10, command=buttonClick)
button4a = Button(root, text="", padx=20, pady=10, command=buttonClick)
button4b = Button(root, text="", padx=20, pady=10, command=buttonClick)
button4c = Button(root, text="", padx=20, pady=10, command=buttonClick)
button4d = Button(root, text="", padx=20, pady=10, command=buttonClick)
button4e = Button(root, text="", padx=20, pady=10, command=buttonClick)
button4f = Button(root, text="", padx=20, pady=10, command=buttonClick)
button4g = Button(root, text="", padx=20, pady=10, command=buttonClick)
button4h = Button(root, text="", padx=20, pady=10, command=buttonClick)
button4i = Button(root, text="", padx=20, pady=10, command=buttonClick)
button4j = Button(root, text="", padx=20, pady=10, command=buttonClick)
button5a = Button(root, text="", padx=20, pady=10, command=buttonClick)
button5b = Button(root, text="", padx=20, pady=10, command=buttonClick)
button5c = Button(root, text="", padx=20, pady=10, command=buttonClick)
button5d = Button(root, text="", padx=20, pady=10, command=buttonClick)
button5e = Button(root, text="", padx=20, pady=10, command=buttonClick)
button5f = Button(root, text="", padx=20, pady=10, command=buttonClick)
button5g = Button(root, text="", padx=20, pady=10, command=buttonClick)
button5h = Button(root, text="", padx=20, pady=10, command=buttonClick)
button5i = Button(root, text="", padx=20, pady=10, command=buttonClick)
button5j = Button(root, text="", padx=20, pady=10, command=buttonClick)
button6a = Button(root, text="", padx=20, pady=10, command=buttonClick)
button6b = Button(root, text="", padx=20, pady=10, command=buttonClick)
button6c = Button(root, text="", padx=20, pady=10, command=buttonClick)
button6d = Button(root, text="", padx=20, pady=10, command=buttonClick)
button6e = Button(root, text="", padx=20, pady=10, command=buttonClick)
button6f = Button(root, text="", padx=20, pady=10, command=buttonClick)
button6g = Button(root, text="", padx=20, pady=10, command=buttonClick)
button6h = Button(root, text="", padx=20, pady=10, command=buttonClick)
button6i = Button(root, text="", padx=20, pady=10, command=buttonClick)
button6j = Button(root, text="", padx=20, pady=10, command=buttonClick)
button7a = Button(root, text="", padx=20, pady=10, command=buttonClick)
button7b = Button(root, text="", padx=20, pady=10, command=buttonClick)
button7c = Button(root, text="", padx=20, pady=10, command=buttonClick)
button7d = Button(root, text="", padx=20, pady=10, command=buttonClick)
button7e = Button(root, text="", padx=20, pady=10, command=buttonClick)
button7f = Button(root, text="", padx=20, pady=10, command=buttonClick)
button7g = Button(root, text="", padx=20, pady=10, command=buttonClick)
button7h = Button(root, text="", padx=20, pady=10, command=buttonClick)
button7i = Button(root, text="", padx=20, pady=10, command=buttonClick)
button7j = Button(root, text="", padx=20, pady=10, command=buttonClick)
button8a = Button(root, text="", padx=20, pady=10, command=buttonClick)
button8b = Button(root, text="", padx=20, pady=10, command=buttonClick)
button8c = Button(root, text="", padx=20, pady=10, command=buttonClick)
button8d = Button(root, text="", padx=20, pady=10, command=buttonClick)
button8e = Button(root, text="", padx=20, pady=10, command=buttonClick)
button8f = Button(root, text="", padx=20, pady=10, command=buttonClick)
button8g = Button(root, text="", padx=20, pady=10, command=buttonClick)
button8h = Button(root, text="", padx=20, pady=10, command=buttonClick)
button8i = Button(root, text="", padx=20, pady=10, command=buttonClick)
button8j = Button(root, text="", padx=20, pady=10, command=buttonClick)
button9a = Button(root, text="", padx=20, pady=10, command=buttonClick)
button9b = Button(root, text="", padx=20, pady=10, command=buttonClick)
button9c = Button(root, text="", padx=20, pady=10, command=buttonClick)
button9d = Button(root, text="", padx=20, pady=10, command=buttonClick)
button9e = Button(root, text="", padx=20, pady=10, command=buttonClick)
button9f = Button(root, text="", padx=20, pady=10, command=buttonClick)
button9g = Button(root, text="", padx=20, pady=10, command=buttonClick)
button9h = Button(root, text="", padx=20, pady=10, command=buttonClick)
button9i = Button(root, text="", padx=20, pady=10, command=buttonClick)
button9j = Button(root, text="", padx=20, pady=10, command=buttonClick)
button10a = Button(root, text="", padx=20, pady=10, command=buttonClick)
button10b = Button(root, text="", padx=20, pady=10, command=buttonClick)
button10c = Button(root, text="", padx=20, pady=10, command=buttonClick)
button10d = Button(root, text="", padx=20, pady=10, command=buttonClick)
button10e = Button(root, text="", padx=20, pady=10, command=buttonClick)
button10f = Button(root, text="", padx=20, pady=10, command=buttonClick)
button10g = Button(root, text="", padx=20, pady=10, command=buttonClick)
button10h = Button(root, text="", padx=20, pady=10, command=buttonClick)
button10i = Button(root, text="", padx=20, pady=10, command=buttonClick)
button10j = Button(root, text="", padx=20, pady=10, command=buttonClick)


# Placing buttons onto the board
button1a.grid(row=1, column=1)
button1b.grid(row=1, column=2)
button1c.grid(row=1, column=3)
button1d.grid(row=1, column=4)
button1e.grid(row=1, column=5)
button1f.grid(row=1, column=6)
button1g.grid(row=1, column=7)
button1h.grid(row=1, column=8)
button1i.grid(row=1, column=9)
button1j.grid(row=1, column=10)
button2a.grid(row=2, column=1)
button2b.grid(row=2, column=2)
button2c.grid(row=2, column=3)
button2d.grid(row=2, column=4)
button2e.grid(row=2, column=5)
button2f.grid(row=2, column=6)
button2g.grid(row=2, column=7)
button2h.grid(row=2, column=8)
button2i.grid(row=2, column=9)
button2j.grid(row=2, column=10)
button3a.grid(row=3, column=1)
button3b.grid(row=3, column=2)
button3c.grid(row=3, column=3)
button3d.grid(row=3, column=4)
button3e.grid(row=3, column=5)
button3f.grid(row=3, column=6)
button3g.grid(row=3, column=7)
button3h.grid(row=3, column=8)
button3i.grid(row=3, column=9)
button3j.grid(row=3, column=10)
button4a.grid(row=4, column=1)
button4b.grid(row=4, column=2)
button4c.grid(row=4, column=3)
button4d.grid(row=4, column=4)
button4e.grid(row=4, column=5)
button4f.grid(row=4, column=6)
button4g.grid(row=4, column=7)
button4h.grid(row=4, column=8)
button4i.grid(row=4, column=9)
button4j.grid(row=4, column=10)
button5a.grid(row=5, column=1)
button5b.grid(row=5, column=2)
button5c.grid(row=5, column=3)
button5d.grid(row=5, column=4)
button5e.grid(row=5, column=5)
button5f.grid(row=5, column=6)
button5g.grid(row=5, column=7)
button5h.grid(row=5, column=8)
button5i.grid(row=5, column=9)
button5j.grid(row=5, column=10)
button6a.grid(row=6, column=1)
button6b.grid(row=6, column=2)
button6c.grid(row=6, column=3)
button6d.grid(row=6, column=4)
button6e.grid(row=6, column=5)
button6f.grid(row=6, column=6)
button6g.grid(row=6, column=7)
button6h.grid(row=6, column=8)
button6i.grid(row=6, column=9)
button6j.grid(row=6, column=10)
button7a.grid(row=7, column=1)
button7b.grid(row=7, column=2)
button7c.grid(row=7, column=3)
button7d.grid(row=7, column=4)
button7e.grid(row=7, column=5)
button7f.grid(row=7, column=6)
button7g.grid(row=7, column=7)
button7h.grid(row=7, column=8)
button7i.grid(row=7, column=9)
button7j.grid(row=7, column=10)
button8a.grid(row=8, column=1)
button8b.grid(row=8, column=2)
button8c.grid(row=8, column=3)
button8d.grid(row=8, column=4)
button8e.grid(row=8, column=5)
button8f.grid(row=8, column=6)
button8g.grid(row=8, column=7)
button8h.grid(row=8, column=8)
button8i.grid(row=8, column=9)
button8j.grid(row=8, column=10)
button9a.grid(row=9, column=1)
button9b.grid(row=9, column=2)
button9c.grid(row=9, column=3)
button9d.grid(row=9, column=4)
button9e.grid(row=9, column=5)
button9f.grid(row=9, column=6)
button9g.grid(row=9, column=7)
button9h.grid(row=9, column=8)
button9i.grid(row=9, column=9)
button9j.grid(row=9, column=10)
button10a.grid(row=10, column=1)
button10b.grid(row=10, column=2)
button10c.grid(row=10, column=3)
button10d.grid(row=10, column=4)
button10e.grid(row=10, column=5)
button10f.grid(row=10, column=6)
button10g.grid(row=10, column=7)
button10h.grid(row=10, column=8)
button10i.grid(row=10, column=9)
button10j.grid(row=10, column=10)




root.mainloop()
4

2 回答 2

0

使用循环可以帮助您:

for i in range(10):
    for j in range(10):
        btn = Button(root, text="", padx=20, pady=10, command=buttonClick)
        btn.grid(row=i+1, column=j+1)

如果您以后需要这些按钮,请将它们放在一个列表中,甚至更好的是嵌套列表,这样您就可以类似地引用 10x10 网格

于 2021-07-07T12:25:39.887 回答
0

这是一个改进的棋盘制造商。我只做一点点改变。

import tkinter as tk


class Board:
    def __init__(self):
        self.root = tk.Tk()
        self.root.resizable(False, False)

        self.matrix = []
        c = ("white", "black")
        cell_colour = True
        for y in range(10):
            for x in range(10):
                button = tk.Button(self.root, width=3, fg=c[not cell_colour],
                                   bg=c[cell_colour], activebackground="red")
                self.matrix.append(button)
                button.grid(row=x, column=y, sticky="news")
                cell_colour = not cell_colour
            cell_colour = not cell_colour
        
    def mainloop(self) -> None:
        self.root.mainloop()
    
chess = Board()
chess.mainloop()

在这里,连接到的按钮buttonClick可以跟踪按下了哪个按钮,并且还具有活动颜色。


import tkinter as tk

class board:

    matrix = [ ]
    c = ['white', 'black']
    d = ['yellow', 'red' ]

    def route( self, n ):
        return lambda: self.buttonClick( n )

    def __init__( self ):
        self.master = tk.Tk()
        self.master.withdraw()
        self.master.update_idletasks()
        self.build( 1 )
        self.master.resizable( False, False )
        self.master.deiconify()

    def build( self, w ):
        for y in range( 10 ):
            for x in range( 10 ):
                button = tk.Button(
                    self.master, width = 9, height = 3,
                    foreground = self.c[w], background = self.c[1-w],
                    activeforeground = self.d[w], activebackground = self.d[1-w],
                    command = self.route( x*10+y ) )
                button.grid( row=x, column=y, sticky='nsew')
                self.matrix.append( button )
                w = 1-w
            w = 1-w

    def buttonClick( self, n ):
        print( n )
    
game = board( )
tk.mainloop()
于 2021-07-07T12:41:28.683 回答