使用tkinter开发寻宝岛游戏时,字体放大与打字机效果结合报错排查
问题修复:TypeError 类型错误解决
错误原因
第39行的for i in line1:是问题根源:
line1是tkinter的Label组件对象,并非字符串内容。直接遍历Label对象会返回非字符串类型的元素(如整数索引),执行a+i时就会触发str与int无法拼接的类型错误。- 要实现逐字打印,需要遍历Label的文本内容,即
line1['text']。 - 额外问题:代码中变量
a同时用于指代Label组件和字符串内容,容易造成混淆,建议重命名区分。
修正后的完整代码
import tkinter window = tkinter.Tk() window.title("Treasure Island") window.attributes('-fullscreen', True) logo = tkinter.Label(window, text=''' | | | | _________|________________.=""_;=.______________|_____________________|_______ | | ,-"_,="" `"=.| | |___________________|__"=._o""-._ `"=.______________|___________________ | `"=._o""=._ _`"=._ | _________|_____________________:=._o "=._."_.-="'"=.__________________|_______ | | __.--" , ; `"=._o." ,-"""-._ ". | |___________________|_._" ,. .` ` `` , `"-._"-._ ". '__|___________________ | |o""=._` , "` `; .". , "-._"-._; ; | _________|___________| ;`-.o""=._; ." ` '`."\` . "-._ /_______________|_______ | | |o; `"-.o""=._`` '` " ,__.--o; | |___________________|_| ; (#) `-.o `"=.`_.--"_o.-; ;___|___________________ ____/______/______/___|o;._ " `".o|o_.--" ;o;____/______/______/____ /______/______/______/_""=._o--._ ; | ; ; ;/______/______/______/_ ____/______/______/______/__""=._o--._ ;o|o; _._;o;____/______/______/____ /______/______/______/______/____""=._o._; | ;_.--"o.--"_/______/______/______/_ ____/______/______/______/______/_____""=.o|o_.--""___/______/______/______/____ /______/______/______/______/______/______/______/______/______/______/_____ / ''') logo.pack() logo.config(font=('length', 15)) line1 = tkinter.Label(window, text="Welcome to Treasure Island,\n" "Your goal is to find the buried Treasure!") line1.config(font=('length', 15)) label1_var = tkinter.StringVar() typewriter_label = tkinter.Label(textvariable=label1_var) typewriter_label.pack() # 设置打字机效果的字体大小,确保放大效果生效 typewriter_label.config(font=('length', 15)) # 遍历Label的文本内容而非Label对象本身 for char in line1['text']: current_text = label1_var.get() label1_var.set(current_text + char) window.update() window.after(50) # 控制逐字打印的间隔 space = tkinter.Label(window, text=" \n \n ") space.pack() window.mainloop()
额外优化说明
- 重命名变量:将原
label1改为label1_var,a改为typewriter_label,避免变量混淆。 - 补充
window.mainloop()启动tkinter主事件循环,原代码缺失该步骤会导致窗口无法正常维持。
内容的提问来源于stack exchange,提问作者moron
相关产品推荐
相关产品推荐

