Python Tkinter混淆

Python Tkinter混淆,python,tkinter,Python,Tkinter,我对Python和编程都是新手,对堆栈溢出也是新手。任何帮助都将不胜感激,我只是为了好玩而玩弄代码,来感受一下 我的目标是在按下按钮时将框从红色变为蓝色。 我将var rec1c设置为“红色”,然后在按下按钮时将其设置为“蓝色”。我运行了密码,盒子从未变蓝。我把打印出来的语句放进去看看是否有变化,盒子从来没有变蓝过。我不明白为什么,因为我一直按下按钮,第一个打印语句从未变回红色。第二次按下时,两个语句都是蓝色的,我想在考虑了689后会变回蓝色,这就是为什么我把它们放在那里 我的问题是 有可能实现

我对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很高兴听到:-)请随意接受你认为最有用的答案。