You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Tkinter多页面切换代码报_tkinter.TclError: bad screen distance如何解决

问题原因
  • 直接触发报错的核心问题:tk.Canvas的create_text()、create_image()方法的首个入参要求为数值型X轴坐标,你错误将self(StartPage页面对象)作为首参数传入,Tkinter解析时把对象的字符串标识.!startpage当作坐标数值处理,直接触发类型不匹配错误。
  • 潜在问题1:SampleApp类的switch_frame方法中调用self._frame.place()时未传入布局参数,会导致页面无法正常铺满窗口。
  • 潜在问题2:StartPage中第一个按钮的command调用的是master.show_frame(),但SampleApp中定义的页面切换方法名为switch_frame,方法名不匹配后续会触发属性不存在报错。
解决方法
  1. 修正create_text和create_image的入参,删除多余的self参数:
# 原错误写法
canvas.create_text(self,13.0,424.0,anchor="nw",text="MAYA",fill="#000000",font=("Sora Regular", 27 * -1))
self.image1 = canvas.create_image(self,500.0,145.0,image=self.image_image_1)

# 修改后写法
canvas.create_text(13.0,424.0,anchor="nw",text="MAYA",fill="#000000",font=("Sora Regular", 27 * -1))
self.image1 = canvas.create_image(500.0,145.0,image=self.image_image_1)
  1. 修正switch_frame中的place调用,传入填充参数保证页面铺满窗口:
# 原错误写法
self._frame.place()

# 修改后写法
self._frame.place(relx=0, rely=0, relwidth=1, relheight=1)
  1. 修正按钮1的调用方法名,和SampleApp中定义的方法名保持一致:
# 原错误写法
command=lambda: master.show_frame(userinterface)

# 修改后写法
command=lambda: master.switch_frame(userinterface)

注意:修改前请确认userinterface这个页面类已经提前定义,否则会触发名称不存在错误。

内容的提问来源于stack exchange,提问作者zakwan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:45:08