python tkinter 如何在特定的网格空间中改变widget的标签?

问题描述 投票:1回答:1

我有一个3x3网格的按钮,所有的按钮都绑定在同一个事件函数上。这个函数根据被点击的按钮来改变特定按钮的标签。我希望能够通过查看按钮在网格上的位置,即行和列的值,来选择哪些按钮会被影响。

例如,我希望能够说:"考虑到点击的按钮在(第1行,第2列),我想改变(第2行,第0列)和(第1行,第1列)按钮的标签。

我知道如何找到被点击的按钮的行和列。

import tkinter

def click(event):
    space = event.widget
    space_label = space['text']
    row = space.grid_info()['row'] #get the row of clicked button
    column = space.grid_info()['column'] #get the column of clicked button

board = tkinter.Tk()

for i in range(0,9): #creates the 3x3 grid of buttons

    button = tkinter.Button(text = "0")

    if i in range(0,3):
        r = 0
    elif i in range(3,6):
        r = 1
    else:
        r = 2

    button.grid(row = r, column = i%3)
    button.bind("<Button-1>",click)

board.mainloop()

但我不知道如何获取按钮的标签,因为只有网格中的一行和一列。

P.S.我是一个新的编码者,如果这很明显的话,很抱歉,我找了一圈,但没有找到任何类似的问题。

python button tkinter grid
1个回答
0
投票

如果你打算在创建widget并将其添加到你的界面后对其进行任何操作,最好保留一个参考。

下面是对你的代码的修改,它可以创建一个字典。button_dict 来存储你的每个按钮。键是元组 (row,column). 我加了 button_dict 作为您的额外输入 click 函数,并修改了按钮绑定以包含这个新的输入,使用 lambda.

import tkinter

def click(event,button_dict):
    space = event.widget
    space_label = space['text']
    row = space.grid_info()['row'] #get the row of clicked button
    column = space.grid_info()['column'] #get the column of clicked button

    button = button_dict[(row,column)] # Retrieve our button using the row/col
    print(button['text']) # Print button text for demonstration

board = tkinter.Tk()

button_dict = {} # Store your button references here

for i in range(0,9): #creates the 3x3 grid of buttons

    button = tkinter.Button(text = i) # Changed the text for demonstration

    if i in range(0,3):
        r = 0
    elif i in range(3,6):
        r = 1
    else:
        r = 2

    button.grid(row = r, column = i%3)
    button.bind("<Button-1>",lambda event: click(event,button_dict))

    button_dict[(r,i%3)] = button # Add reference to your button dictionary

board.mainloop()

如果你只对被按下的按钮感兴趣,你可以简单地访问一下。event.widget 属性。从你的例子来看,听起来你想修改每个事件上的任意数量的按钮,所以我认为字典会给你更多的通用性。

© www.soinside.com 2019 - 2024. All rights reserved.