【问题标题】:Change colour of tkinter button created in a loop?更改循环中创建的 tkinter 按钮的颜色?
【发布时间】:2020-12-16 14:20:07
【问题描述】:

我使用下面的代码创建了一个按钮网格:

for x in range(10):
    for y in range(10):
        btn = Button(frame, command=button_click(x, y))
        btn.config(height=1, width=1)
        btn.grid(column=x, row=y, sticky='nsew')

并且我想编写函数 button_click 以在单击按钮后将按钮变为不同的颜色,但是由于我在循环中创建了所有按钮,因此我没有每个按钮的特定变量名称,所以我不知道怎么做最好?我不想编写 100 行代码来创建按钮。我想也许我可以通过将按钮的坐标传递给函数并以某种方式使用这些信息来做到这一点,但我找不到解决方案。任何有关如何执行此操作或我可以采取的替代方法的建议将不胜感激!

【问题讨论】:

    标签: python macos tkinter


    【解决方案1】:

    试试这个:

    import tkinter as tk
    import random
    
    def button_click(btn):
        color = random.choice(['red', 'blue', 'green'])
        btn.config(bg=color)
        print(btn)
    
    window = tk.Tk()
    
    for x in range(10):
        for y in range(10):
            btn = tk.Button(window)    
            btn.config(text=f'{x}{y}',height=1, width=1, command=lambda button=btn: button_click(button))
            btn.grid(column=x, row=y, sticky='nsew')
    
    window.mainloop()
    

    更新:框架上的按钮

    import tkinter as tk
    import random
    
    def button_click(btn):
        color = random.choice(['red', 'blue', 'green'])
        btn.config(bg=color)
        print(btn)
    
    window = tk.Tk()
    
    frame = tk.Frame(window)
    frame.pack()
    
    for x in range(10):
        for y in range(10):
            btn = tk.Button(frame)    
            btn.config(text=f'{x}{y}',height=1, width=1, command=lambda button=btn: button_click(button))
            btn.grid(column=x, row=y, sticky='nsew')
    
    window.mainloop()
    

    【讨论】:

    • 当我使用它时,点击似乎只改变了最后一个按钮,我假设这是最近分配给变量 btn 的?但更接近我正在寻找的东西!
    • @aidakemind 不,它会更改为我单击的按钮。请再次检查
    • @aidakemind 你点击按钮时有颜色变化吗?
    • 是的,但只有最后一个按钮..可能与我在框架上有按钮用于调整大小的事实有关
    • @aidakemind 除非您发布整个代码,否则我无法确定。
    猜你喜欢
    • 2018-05-30
    • 2020-01-10
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 2016-11-07
    • 2022-11-04
    • 1970-01-01
    • 2020-02-20
    相关资源
    最近更新 更多