Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter:按下时更改按钮背景_Python_Tkinter - Fatal编程技术网

Python Tkinter:按下时更改按钮背景

Python Tkinter:按下时更改按钮背景,python,tkinter,Python,Tkinter,我知道我应该使用bttn['text']='text',但我正在为创建按钮。我想在按下按钮时将其颜色更改为红色 示例代码: from tkinter import * root = Tk() btn = [i for i in range(10)] for i in range(len(btn)): b = Button(root, text=str(i), command=lambda c=i: print(i)) b.pack() root.mainloop() 我

我知道我应该使用
bttn['text']='text'
,但我正在为创建按钮。我想在按下按钮时将其颜色更改为红色

示例代码:

from tkinter import *

root = Tk()

btn = [i for i in range(10)]

for i in range(len(btn)):
    b = Button(root, text=str(i), command=lambda c=i: print(i))
    b.pack()

root.mainloop()

我需要替换什么来代替打印(I)?

为此,需要将按钮对象“b”传递到回调函数中。为此,需要在下一行设置命令,以便“b”对象可用。像这样:

from tkinter import *

root = Tk()

def change_to_red(bttn):
    bttn.config(bg='red', activebackground='red') # same as bttn['bg'] = 'red';  bttn['activebackground'] = 'red'
    print(bttn['text'])

btn = [i for i in range(10)]

for i in range(len(btn)):
    b = Button(root, text=str(i), width=6)
    b.config(command=lambda c=b: change_to_red(c))
    b.pack()

root.mainloop()
但实际上,这将是一个学习子类的好地方。您可以修改tkinter的按钮,使其成为您自己的按钮类型,除正常操作外,还可以执行您想要的操作:

import tkinter as tk

class Desync192Button(tk.Button):
    def __init__(self, master=None, **kwargs):
        self.command = kwargs.pop('command', None)
        super().__init__(master, command=self.on_click, **kwargs)
    def on_click(self):
        self.config(bg='red', activebackground='red')
        if self.command: self.command()

# demo:
root = tk.Tk()

for i in range(10):
    b = Desync192Button(root, text=i, width=6, command=lambda c=i: print(c))
    b.pack()

root.mainloop()

您希望按钮在单击后永远变为红色,还是仅在单击后恢复正常颜色?