使用Tkinter中的按钮更改背景颜色

时间:2017-09-07 12:51:47

标签: python python-3.x tkinter

我试图用Python创建一个粘滞便笺程序来练习。我想创建一个按钮,以便在单击时,文本框的背景变为黄色。我的代码如下:

from tkinter import *
import random


color = ['burlywood2', 'seagreen1', 'steelblue1', 'gold']
randomColor = random.choice(color)

class Sticky(Frame):
def __init__(self, master):
    Frame.__init__(self, master)
    master.minsize(width=250, height=200)
    master.configure(background=randomColor)
    self.pack(fill=BOTH, expand=YES)


    self.txtEntry = Text(background=randomColor, highlightthickness=0, relief=RAISED)
    self.txtEntry.pack(fill=BOTH, expand=YES)

    myString = input("Enter your text here: ")
    self.txtEntry.insert(END, myString)
    self.createWidgets()


def createWidgets(self):
    self.QUIT = Button(self)
    self.QUIT["text"] = "Completed"
    self.QUIT["fg"]   = "white"
    self.QUIT["background"] = "green"
    self.QUIT["command"] =  self.quit
    self.QUIT.pack(fill=BOTH, expand=YES)

    self.URGENT = Button(self)
    self.URGENT["text"] = "URGENT"
    self.URGENT["fg"] = "yellow"
    self.URGENT["background"] = "red"

    self.URGENT["command"] = self.highLight()
    self.URGENT.pack(fill=BOTH, expand=YES)

def highLight(txtEntry):
    txtEntry.configure(background='yellow')
    txtEntry.update()

我似乎无法让它发挥作用。当"紧急"单击按钮,没有任何反应。感谢您的任何建议

1 个答案:

答案 0 :(得分:1)

highLight是一个实例方法*,因此它的第一个参数应该是self,而不是txtEntry。即使不将其作为参数传递,您仍然可以将txtEntry作为self的属性而不是本地名称来访问。

def highLight(self):
    self.txtEntry.configure(background='yellow')

执行self.URGENT["command"] = self.highLight时,您正在告诉Python“立即调用self.highLight(),然后获取该函数的返回值并将其分配给命令属性”。但是highLight返回None,因此按钮最终没有任何命令。在没有括号的情况下执行赋值,以便为属性分配self.highLight而不是其返回值。

self.URGENT["command"] = self.highLight

(*至少,我认为是。你的缩进被搞砸了,因此不清楚你的def中哪些实际上在Sticky类定义中。)