Python Tkinter项目中Canvas上Button配置属性报错如何解决
报错原因
Canvas.itemconfig() 方法的第一个入参要求是Canvas创建自身元素时返回的元素ID,你传入的Q1是Button控件实例,不是Canvas窗口元素的ID,Canvas无法识别该参数,误将其当做标签搜索表达式解析,因此抛出该错误。
另外补充:Canvas的itemconfig只能修改Canvas自身元素的属性(比如窗口元素的位置、锚点等),无法直接修改嵌入的Button控件本身的颜色、文本属性,Button的自有属性需要通过Button实例自身的方法修改。
修复方案
直接调用Button实例的config()方法修改属性即可,不需要调用Canvas的方法。
修正后的完整代码如下:
from tkinter import* from tkinter import ttk #root root = Tk() root.geometry('640x520') #Canvas myCanvas = Canvas(root, width=350, height=300, bd=0, highlightthickness=0) myCanvas.pack(fill='both', expand=True) def qu1(): # 直接修改Button实例的属性即可 Q1.config(bg='green',text= 'Done') Q1 = Button(root, width=15, height=10, bg='#F3C4B7',fg='white', text='1', command=qu1) myCanvas.create_window(10,10, anchor='nw', window=Q1) root.mainloop()
如果你确实需要操作Canvas上的窗口元素,需要先保存create_window返回的ID,示例如下:
# 保存Canvas窗口元素的ID win_id = myCanvas.create_window(10,10, anchor='nw', window=Q1) # 后续可以用itemconfig修改窗口元素的属性,比如调整锚点 myCanvas.itemconfig(win_id, anchor='center')
内容的提问来源于stack exchange,提问作者Rawabi
相关产品推荐
相关产品推荐

