Tkinter Canvas内嵌Frame自适应扩展触发itemconfig属性错误求助
错误原因
canvas_configure函数中错误对事件对象event调用了itemconfig方法,该方法是Canvas对象的专属方法,事件对象本身不具备该属性itemconfig方法操作画布内元素时,需要传入create_window方法返回的元素ID,不能直接传入Frame对象- 未给内嵌Frame的列设置拉伸权重,就算Frame宽度适配了Canvas,内部的Entry控件也不会自动横向填充
修复后完整可运行代码
from tkinter import * # Master frame app = Tk() app.columnconfigure(0, weight=1) app.rowconfigure(0, weight=1) def load_files(): # Do stuff which gives list of company names companies_list = [x for x in range(0, 30)] # Generates Tkinter elements y = 0 for x in companies_list: y += 1 old_co = Entry(frame) old_co.insert(0, x) old_co.grid(row=y, column=0, sticky=E+W) new_co = Entry(frame) new_co.grid(row=y, column=1, sticky=E+W) prefix = Entry(frame) prefix.grid(row=y, column=2, sticky=E+W) # Sub-Frame company_header_frame = LabelFrame(app, text='Company Name') company_header_frame.grid(row=0, column=0, sticky=N+S+E+W) company_header_frame.columnconfigure(0, weight=1) company_header_frame.rowconfigure(0, weight=1) # Canvas canvas = Canvas(company_header_frame, height=100) canvas.grid(row=0, column=0, sticky=N+S+E+W) # Canvas Frame frame = Frame(canvas) # 给Frame的三列设置拉伸权重,内部Entry可跟随填充 frame.columnconfigure(0, weight=1) frame.columnconfigure(1, weight=1) frame.columnconfigure(2, weight=1) # 保存create_window返回的元素ID,后续用于调整属性 frame_window = canvas.create_window((0, 0), window=frame, anchor='nw') # Sidebar scroll_y = Scrollbar(company_header_frame, orient="vertical") scroll_y.grid(row=0, column=1, sticky=N+S) scroll_y.config(command=canvas.yview) def canvas_configure(event): canvas_width = event.width # 调用canvas对象的itemconfig方法,传入保存的窗口元素ID canvas.itemconfig(frame_window, width=canvas_width) def config_frame(_): canvas.configure(scrollregion=canvas.bbox('all'), yscrollcommand=scroll_y.set) canvas.bind('<Configure>', canvas_configure) frame.bind('<Configure>', config_frame) load_files() app.mainloop()
主要修改点
- 保存
canvas.create_window的返回值作为元素操作ID - 修正
canvas_configure函数的调用对象,改用全局canvas对象调用itemconfig - 给内嵌Frame的三列配置拉伸权重,实现内部Entry的自适应填充
内容的提问来源于stack exchange,提问作者WRL41225
相关产品推荐
相关产品推荐

