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

Flashcard应用故障求助:卡片无法显示选定问答内容

问题:Flashcard应用卡片无法显示选定内容,仅显示占位符“word”

我正在开发一款Flashcard应用,但遇到了问题:卡片无法显示选定的问题和答案,仅显示占位符“word”。我怀疑可能是代码的顺序或位置有误。之前尝试将flip_card函数放入next_card函数中,但并未解决问题,这么做是因为最初遇到的错误是flip_card函数中selected_answer未定义。

原代码:

def next_card():
    global current_card, flip_timer
    window.after_cancel(flip_timer)
    current_card = random.choice(selected_flashcards)
    selected_question, selected_answer = selected_flashcard
    selected_question = selected_question.strip("()").strip("'\"")
    selected_answer = selected_answer.strip("()").strip("'\"")
    canvas.itemconfig(card_title, text="Question", fill="black")
    canvas.itemconfig(card_word, text=selected_question, fill="black")
    canvas.itemconfig(card_background, image=card_front_img)
    flip_timer = window.after(3000, func=flip_card)
    

def flip_card():
    canvas.itemconfig(card_title, text = "Answer", fill = "white")
    canvas.itemconfig(card_word, text=selected_answer, fill = "white")
    canvas.itemconfig(card_background, image=card_back_img)
    selected_flashcards.remove(current_card) 
    
window = Toplevel()
window.title("Quick Revision")
window.config(padx=50, pady=50, bg=BACKGROUND_COLOR)
flip_timer = window.after(3000, func=flip_card)

canvas = Canvas(width=800, height=526)
card_front_img = PhotoImage(file="./images/card_front.png")
card_back_img = PhotoImage(file="./images/card_back.png")
card_background = canvas.create_image(400, 263, image=card_front_img)
card_title = canvas.create_text(400, 150, text="Title", font=("Ariel", 40, "italic"))
canvas.config(bg=BACKGROUND_COLOR, highlightthickness=0)
card_word = canvas.create_text(400, 263, text="Word", font=("Ariel", 60, "bold"), tags="word")
canvas.grid(row=0, column=0, columnspan=2)

check_image = PhotoImage(file="./images/right.png")
flip_button = Button(image=check_image, command=flip_card())
flip_button.grid(row=1, column=1, sticky="E")

next_card()
window.mainloop()

问题分析与修复方案

错误点:

  1. 变量名拼写错误:next_card函数中,用selected_flashcard解构变量,但实际选中的卡片是current_card,直接导致无法获取正确的问题和答案。
  2. 作用域问题:flip_card函数无法访问next_card内部的selected_answer变量,需要将其声明为全局变量,或者从current_card中重新获取。
  3. 按钮绑定错误:flip_button的command参数写成了flip_card(),会在程序启动时立即执行flip_card,而非点击按钮时执行,应改为command=flip_card。
  4. 初始定时器错误:程序启动时就创建flip_timer,但此时还未初始化current_card,会导致flip_card执行出错,需删除这行初始化代码,由next_card函数负责设置定时器。

修正后的代码:

import random
from tkinter import Toplevel, Canvas, PhotoImage, Button

# 假设BACKGROUND_COLOR和selected_flashcards已定义
BACKGROUND_COLOR = "#B1DDC6"
selected_flashcards = [("Question1", "Answer1"), ("Question2", "Answer2")]

def next_card():
    global current_card, flip_timer, selected_answer
    # 取消之前的定时器(如果存在)
    if 'flip_timer' in globals():
        window.after_cancel(flip_timer)
    current_card = random.choice(selected_flashcards)
    selected_question, selected_answer = current_card  # 修正变量名
    selected_question = selected_question.strip("()").strip("'\"")
    selected_answer = selected_answer.strip("()").strip("'\"")
    canvas.itemconfig(card_title, text="Question", fill="black")
    canvas.itemconfig(card_word, text=selected_question, fill="black")
    canvas.itemconfig(card_background, image=card_front_img)
    flip_timer = window.after(3000, func=flip_card)
    

def flip_card():
    global selected_answer, current_card
    canvas.itemconfig(card_title, text="Answer", fill="white")
    canvas.itemconfig(card_word, text=selected_answer, fill="white")
    canvas.itemconfig(card_background, image=card_back_img)
    if current_card in selected_flashcards:
        selected_flashcards.remove(current_card) 
    
window = Toplevel()
window.title("Quick Revision")
window.config(padx=50, pady=50, bg=BACKGROUND_COLOR)

canvas = Canvas(width=800, height=526)
card_front_img = PhotoImage(file="./images/card_front.png")
card_back_img = PhotoImage(file="./images/card_back.png")
card_background = canvas.create_image(400, 263, image=card_front_img)
card_title = canvas.create_text(400, 150, text="Title", font=("Ariel", 40, "italic"))
canvas.config(bg=BACKGROUND_COLOR, highlightthickness=0)
card_word = canvas.create_text(400, 263, text="Word", font=("Ariel", 60, "bold"), tags="word")
canvas.grid(row=0, column=0, columnspan=2)

check_image = PhotoImage(file="./images/right.png")
flip_button = Button(image=check_image, command=flip_card)  # 修正按钮绑定
flip_button.grid(row=1, column=1, sticky="E")

next_card()
window.mainloop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:35:03