在有多个其他按钮的情况下,是否可以通过单击为按钮上色

2024-06-01 10:56:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个名为“战舰”的游戏。为此,我必须允许用户放置其船只。
我想通过允许用户为必须放置飞船的字段着色来尝试这一点。我的问题是,我使用2 for循环在列表中创建了15 x 15个变量。例如,是否有可能使用命令获取网格的行和列,因为例如,这部分将始终提供我请求的最后一个i和最后一个j。否则,我将不得不创建225行, 在使用lambda时提到ij

self.ship[i][j] = tk.Button(root, text="", padx=30, pady=20, command=lambda:color(i,j))
self.ship[i][j].grid(row=i, column=j)


Tags: lambda用户命令self网格游戏列表for
1条回答
网友
1楼 · 发布于 2024-06-01 10:56:12

我希望下面的代码能给你一个很好的起点来继续你的游戏

我使用了相同的方法,使用两个for循环来创建10x10 grid个按钮。然后,我使用click event callback获取正在单击的小部件,然后使所选按钮变为蓝色或对该小部件执行任何操作

import tkinter as tk

class Game:

    def __init__(self, master):
        self.master = master
        self.master.resizable(0,0)
        # row index
        for row in range(10):
            # col index
            for col in range(10):
                self.button = tk.Button(master, width=1, height=1)
                self.button.grid(row=row, column=col, padx=8, pady=8, ipadx=10, ipady=4)
                self.button.bind("<Button-1>", self.callback)
        master.mainloop()

    def callback(self, event):
        # get the clicked button
        clicked_btn = event.widget
        btn_at_row_col = clicked_btn.config(bg='blue', state='disabled')

if __name__ == "__main__":
    root = tk.Tk()
    Game(root)  

输出GUI:

这将呈现按钮的10x10网格

然后你可以点击任何蓝色的按钮

相关问题 更多 >