簡體   English   中英

無法將回車鍵綁定到按鈕 Python Tkinter

[英]Unable to bind the enter key to button Python Tkinter

我正在創建一個抽認卡應用程序來幫助我學習語言。 該應用程序的基本思想是在我給出答案時隨機循環遍歷單詞列表。 當我回答 flash 卡片時,程序會顯示卡片上單詞、翻譯、例句等的信息。每次新卡片出現時,都會創建一個“question_frame”並為卡片創建一個“answer_frame”,循環繼續,直到所有卡片都被正確回答。 我有一種感覺,當我嘗試將按鈕綁定到主 window 時,此循環以某種方式干擾了綁定或答案框。

我已經嘗試了很多我在這個網站上找到的這類問題的答案,綁定到 function,使用 lambda 表達式等。但沒有成功。

import tkinter as tk
import random

def get_random_deck():

    new_deck = to_study
    r = random.SystemRandom()
    r.shuffle(to_study)

    return new_deck


def question_page(deck):


    question_frame = tk.Frame(window, width = 600, height = 600)
    question_frame.grid(row = 0, column = 0, sticky = 'news')

    question_label = tk.Label(question_frame, text = deck[0][0])
    question_label.grid(row = 1, column = 1, columnspan = 2)
    question_entry = tk.Entry(question_frame)
    question_entry.grid(row = 2, column = 1, columnspan = 2)

    var = tk.BooleanVar(False)

    check_button = tk.Button(question_frame, text = 'Check Answer', command = set_value(var))
    check_button.grid(row = 3, column = 1, columnspan = 2)

    question_frame.bind('<Return>', (lambda event: check_button.invoke()))

    check_button.wait_variable(var)

    answer = question_entry.get()

    return answer

def answer_page(deck,color): 

    answer_frame = tk.Frame(window, width = 600, height = 600)

    answer_frame.grid(row = 0, column = 0, sticky = 'news')

    var = tk.BooleanVar(False)

    next_button = tk.Button(answer_frame, text = 'Next', command = set_value(var))
    next_button.grid(row = 3, column = 1, sticky = 'n')

    answer_frame.bind('<Return>', (lambda event: next_button.invoke()))

    next_button.wait_variable(var)

def set_value(var): 

    value  = lambda: var.set(True)
    return value    

def study_loop():

    deck = get_random_deck()

    while len(deck) > 0:

        r = random.SystemRandom()

        r.shuffle(deck)

        answer = question_page(deck)

        if answer in deck[0][1]:

            answer_page(deck, 'chartreuse2')


to_study = [['Big', 'small'], ['small', 'big']]

window = tk.Tk()

window.geometry('600x600')

study_loop()


window.mainloop()

我正在使用 BooleanVar 來幫助移動循環,也許有更好的方法可以做到這一點,但以我有限的知識和經驗,這是我讓它工作的唯一方法。

所以總而言之,我希望能夠綁定回車鍵以在問題框架上輸入抽認卡答案,然后從答案頁面前進。

所以解決方案結果是我需要通過 study_loop 將焦點設置為正確的小部件,因為我是 go。

我將焦點放在問題框架上的 Entry 小部件上,然后將按鈕調用也綁定到該小部件。

question_entry.focus_set()
question_entry.bind('<Return>', lambda event: check_button.invoke())

對於答案框架,我將焦點和鍵綁定到框架本身。

answer_frame.focus_set()
answer_frame.bind('<Return>', lambda event: check_button.invoke())

現在,當我在每一幀上按回車鍵時,循環繼續到下一幀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM