【问题标题】:Create Functions for New Windows in Python在 Python 中为新窗口创建函数
【发布时间】:2021-12-04 18:47:00
【问题描述】:

我有一个函数,它创建一个新窗口并更新一些值以插入到新窗口中的一个条目小部件中,作为时间表测验的一部分。然后我需要创建一个在单击提交按钮时运行的新函数,并检查用户的答案是否正确。但是,这个新函数在运行时给了我一个 NameError,因为它无法识别新窗口中的小部件,只能检查原始窗口中的小部件。如何让它检查新窗口中的小部件? 原始窗口:

Label(window,text="TIMES TABLES").pack()
game_btn = Button(window, text="Play Game",command=playGameClicked)
game_btn.pack()

创建新窗口的函数:

def playGameClicked():
    #create new window
    newWindow = Toplevel(window)
    newWindow.geometry("500x300+0+0")
    Label(newWindow, text = "Times Tables Game").pack()    
    Label(newWindow,text="Question:",font=("Helvetica",10),width=10,).pack()
    question_box = Entry(newWindow,width=30,background="light blue")
    question_box.pack()
    Label(newWindow,text="Your Answer:",font=("Helvetica",10),width=10).pack()
    answer_box = Entry(newWindow,width=50,background="light green")
    answer_box.pack()
    submit_btn = Button(newWindow,text="Submit",width=10,command=submitClicked)
    submit_btn.pack()
    Label(newWindow,text="You are...",font=("Helvetica",10),width=10).pack()
    correction_box = Text(newWindow,width=15,height=1,background="light blue")
    correction_box.pack()

    #new question (all_tables_dict is a long dictionary of 1-12xtables e.g"1*2":2)
    question_box.delete(0,END)
    keys = list(all_tables_dict.keys())
    new_question = random.choice(keys)
    question_box.insert(END, new_question)

当点击提交按钮时:(这是不起作用的功能)

def submitClicked():
    answer_box.get(0.0,END)
    try:
        answer = all_tables_dict[question]
        correct=True
    except:
        correct=False
    if correct==True:
        correction_box.insert("CORRECT!")
    else:
        correction_box.insert("INCORRECT!")

【问题讨论】:

  • 总是将完整的错误消息(从单词“Traceback”开始)作为文本(不是截图,不是链接到外部门户)有问题(不是评论)。还有其他有用的信息。
  • 也许您必须将小部件分配给 global 变量 - 才能在其他功能中访问此小部件。
  • 全局变量是必要的,但也有错误answer_box.get(0.0,END),应该是answer = answer_box.get()

标签: python function tkinter window pack


【解决方案1】:

你没有显示完整的错误信息,我无法运行它,所以我猜

在函数内部创建的所有变量都是local,不能在其他函数中访问。您必须通知函数它必须将小部件分配给全局变量。

def playGameClicked():
    global answer_box
    global correction_box

    # ... code ...

    answer_box = ...

    # ... code ...

    correction_box = ...

    # ... code ...

【讨论】:

    猜你喜欢
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多