Python Tkinter混淆
我对Python和编程都是新手,对堆栈溢出也是新手。任何帮助都将不胜感激,我只是为了好玩而玩弄代码,来感受一下 我的目标是在按下按钮时将框从红色变为蓝色。 我将var rec1c设置为“红色”,然后在按下按钮时将其设置为“蓝色”。我运行了密码,盒子从未变蓝。我把打印出来的语句放进去看看是否有变化,盒子从来没有变蓝过。我不明白为什么,因为我一直按下按钮,第一个打印语句从未变回红色。第二次按下时,两个语句都是蓝色的,我想在考虑了689后会变回蓝色,这就是为什么我把它们放在那里 我的问题是 有可能实现我的目标吗? 如果是,怎么做? 有没有比我的方法更好的方法? 我也试着把我所有的代码都放到问题中,但是它删掉了很多,所以我删除了所有的代码,除了必要的代码。假设语法是正确的Python Tkinter混淆,python,tkinter,Python,Tkinter,我对Python和编程都是新手,对堆栈溢出也是新手。任何帮助都将不胜感激,我只是为了好玩而玩弄代码,来感受一下 我的目标是在按下按钮时将框从红色变为蓝色。 我将var rec1c设置为“红色”,然后在按下按钮时将其设置为“蓝色”。我运行了密码,盒子从未变蓝。我把打印出来的语句放进去看看是否有变化,盒子从来没有变蓝过。我不明白为什么,因为我一直按下按钮,第一个打印语句从未变回红色。第二次按下时,两个语句都是蓝色的,我想在考虑了689后会变回蓝色,这就是为什么我把它们放在那里 我的问题是 有可能实现
class PythonTest(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.parent = parent
self.initUI()
def initUI(self):
self.parent.title("Python!")
self.style = Style()
self.style.theme_use("default")
self.pack(fill=BOTH, expand=1)
self.canw = 300
self.canh = 400
paper = Canvas(self, width=self.canw, height=self.canh)
paper.pack()
self.rec1c = 'red'
self.rec1o = 'red'
self.rec1 = paper.create_rectangle(0, 0, 300, 300, fill=self.rec1c, outline=self.rec1o)
self.translate = Button(self, text="Change Color!", command=self.toB)
self.translate.place(x=50, y=50)
def toB(self):
print(self.rec1c)
self.rec1c = 'blue'
print(self.rec1c)
Tk.update
更改
self.rec1c
的值不会将任何更改传播到使用self.rec1c
定义属性的画布元素self.rec1c
有一个新值,但是canvas元素仍然很高兴地指向旧值,并且无论self.rec1c发生什么情况,都将继续这样做
如果希望更改矩形的属性,则需要使用itemconfig
显式更改它们
self.paper = Canvas(self, width=self.canw, height=self.canh)
self.paper.pack()
self.rec1 = paper.create_rectangle(0, 0, 300, 300, fill="red", outline="red")
#later, in toB...
self.paper.itemconfig(self.rec1, fill="blue")
要从
toB()
访问paper
,请使用self.paper
并更改颜色,请在toB
方法中添加self.paper.itemconfig(self.rec1,fill=self.rec1c)
class PythonTest(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.parent = parent
self.initUI()
def initUI(self):
self.parent.title("Python!")
#self.style = Style()
#self.style.theme_use("default")
self.pack(fill=BOTH, expand=1)
self.canw = 300
self.canh = 400
self.paper = Canvas(self, width=self.canw, height=self.canh)
self.paper.pack()
self.rec1c = 'red'
self.rec1o = 'red'
self.rec1 = self.paper.create_rectangle(0, 0, 300, 300, fill=self.rec1c, outline=self.rec1o)
self.translate = Button(self, text="Translate to Pig Latin", command=self.toB)
self.translate.place(x=50, y=50)
def toB(self):
print(self.rec1c)
self.rec1c = 'blue'
print(self.rec1c)
self.paper.itemconfig(self.rec1, fill=self.rec1c)
你能把全班的人都放进去吗?我只是很抱歉第一次没用谢谢大家。我实现了我的目标。@killer很高兴听到:-)请随意接受你认为最有用的答案。