运行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,方法名不匹配后续会触发属性不存在报错。
解决方法
- 修正
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)
- 修正
switch_frame中的place调用,传入填充参数保证页面铺满窗口:
# 原错误写法 self._frame.place() # 修改后写法 self._frame.place(relx=0, rely=0, relwidth=1, relheight=1)
- 修正按钮1的调用方法名,和
SampleApp中定义的方法名保持一致:
# 原错误写法 command=lambda: master.show_frame(userinterface) # 修改后写法 command=lambda: master.switch_frame(userinterface)
注意:修改前请确认userinterface这个页面类已经提前定义,否则会触发名称不存在错误。
内容的提问来源于stack exchange,提问作者zakwan
相关产品推荐
相关产品推荐

