tkinter多个按钮颜色更改 [英] tkinter Multiple Buttons Colour Change

查看:73
本文介绍了tkinter多个按钮颜色更改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用tkinter创建一个8x8的按钮矩阵,当按下各个按钮时,它会添加到最终列表中(例如,finalList =((0,0),(5,7),(6,6), ...),允许我快速创建8x8(x,y)坐标图像。我已经创建了带有按钮的窗口,但现在在尝试在函数中引用这些按钮以添加到列表甚至更改菜单时遇到了问题按钮的颜色

I'm using tkinter to create a 8x8 button matrix, which when the individual buttons are pressed add to a final list (eg finalList = ((0,0),(5,7),(6,6), ...), allowing me to quickly create 8x8 (x,y) co-ordinate images. I have created the window with the buttons but now have issues trying to reference these buttons in a function to add to a list or even change the colour of the button

我已经了解到,一旦创建了按钮并创建了另一个按钮,它就会移动到该按钮引用中,我怀疑我需要使用dict或2D数组来存储所有这些按钮参考,但正在努力寻找解决方案。

I have read that once the button is created and you create another it moves to that button reference. I suspect I need to use a dict or 2D array to store all these reference of buttons but am struggling to figure out a solution.

from tkinter import *

class App:

    def updateChange(self):
        '''
        -Have the button change colour when pressed
        -add coordinate to final list
        '''
        x , y = self.xY
        self.buttons[x][y].configure(bg="#000000")

    def __init__(self, master):
        frame = Frame(master)
        frame.pack()

        self.buttons = [] # Do I need to create a dict of button's so I can reference the particular button I wish to update?
        for matrixColumn in range(8):
            for matrixRow in range(8):
                self.xY = (matrixColumn,matrixRow)
                stringXY = str(self.xY)
                self.button = Button(frame,text=stringXY, fg="#000000", bg="#ffffff", command = self.updateChange).grid(row=matrixRow,column=matrixColumn)
                self.buttons[matrixColumn][matrixRow].append(self.button)


root = Tk()
app = App(root)
root.mainloop()

8x8矩阵示例

推荐答案

下面是2个示例,第一个是如果您只想更改颜色,而无需更改其他任何内容,则可以不使用列表就可以进行更改。第二个涉及使用列表,并演示Delioth指出的内容

Below are 2 examples, the first is if you just want to change the colour and nothing else then you can do it without using a list. The second involves using a list and demonstrates what Delioth has pointed out

class App(object):
    def __init__(self, master):
        self._master = master

        for col in range(8):
            for row in range(8):
                btn = tk.Button(master, text = '(%d, %d)' % (col, row), bg = 'white')
                btn['command'] = lambda b = btn: b.config(bg = 'black')
                btn.grid(row = row, column = col)

class App(object):
    def __init__(self, master):
        self._master = master
        self._btn_matrix = []

        for col in range(8):
            row_matrix = []
            for row in range(8):
                btn = tk.Button(master, text = '(%d, %d)' % (col, row), bg = 'white',
                                command = lambda x = row, y = col: self.update(x, y))
                btn.grid(row = row, column = col)
                row_matrix.append(btn)
            self._btn_matrix.append(row_matrix)

    def update(self, row, col):
        self._btn_matrix[col][row].config( bg = 'black' )

if __name__ == '__main__':
    root = tk.Tk()
    app = App(root)
    root.mainloop()

这篇关于tkinter多个按钮颜色更改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆