Tkinter itemcget异常:无法打印变量值且条件判断失效
问题分析与解决
核心问题
你的代码调用 canvas.itemcget 时,选项名称缺少前导连字符 -,导致获取到的状态值为空字符串——这就是:
print(test, type(test))仅显示类型(空字符串肉眼难以识别)的原因;flip_card中check_state == "normal"条件始终不触发的原因。
在Tkinter中,使用 itemcget 获取Canvas元素属性时,选项名称需与Tcl命令格式一致,即必须带前导连字符(如 -state 而非 state)。
修正后的代码
def choose_word(): # 修复索引越界问题:randint是闭区间,最大索引应为列表长度减1 card_num = random.randint(0, len(french_vocab_list) - 1) canvas.itemconfig(french_word, text=french_vocab_list[card_num]) test = canvas.itemcget(card_front, '-state') # 添加前导连字符 print(test, type(test)) window.after(3000, flip_card) def flip_card(): check_state = canvas.itemcget(card_front, '-state') # 添加前导连字符 print(check_state) if check_state == "normal": print("If condition fulfilled") canvas.itemconfig(card_front, state="hidden") canvas.itemconfig(card_back, state="normal")
额外提示
原代码中 random.randint(0, len(french_vocab_list)) 存在索引越界风险,因为 randint(a, b) 会返回包含 b 的整数,而列表的最大有效索引是 len(french_vocab_list)-1。也可以直接用 random.choice(french_vocab_list) 随机选取元素,更简洁安全。
内容的提问来源于stack exchange,提问作者Zutari
相关产品推荐
相关产品推荐

