我试图用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()
我似乎无法让它发挥作用。当"紧急"单击按钮,没有任何反应。感谢您的任何建议
答案 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类定义中。)