Как мне перебрать генератор случайных чисел в Tkinter? - Python - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть основа c GUI для моего приложения, использующего Tkinter, генератор покажет мне случайное слово из словаря на иврите, есть две основные функции, которые я не знаю, как создать.

1) Когда я нажимаю «Далее», я хочу увидеть новое словарное слово. Как создать функцию для генерации нового слова в указанном фрейме Tkinter, когда я нажимаю кнопку «Далее»?

2) Когда я нажимаю кнопку «Отправить», я хочу проверить, является ли Engli sh (ключ ) соответствует ивриту (значение) в моем словаре. Как создать функцию для проверки ввода пользователя по соответствующему ключу для заданного значения для команды кнопки?

Я новичок, поэтому я ценю возможность обучения, и я действительно хочу использовать это приложение для собственного обучения. Вот большая часть кода:

from tkinter import ttk
import random

dictionary = {'give her':'תנ לה', 'give me': 'תני לי', 'give us': 'תן לנו'
            ,'give him': 'תן לו', 'give them': 'תן להם' 
            , 'give to them (f)': 'תן להן'}

question = random.choice(list(dictionary.values())) 

answer = dictionary.keys() == question



class Feedback:

    def __init__(self, master):    

        self.frame_header = ttk.Frame(master)
        self.frame_header.pack()
        # self.logo = PhotoImage(file = '/Users/las/Desktop/Python/flagicon.png')
        # ttk.Label(self.frame_header, image = self.logo).grid(row = 0, column = 0, rowspan = 2)
        ttk.Button(self.frame_header, text = 'Quit', command = self.Quit).grid(row=0, column=3)

        ttk.Label(self.frame_header, wraplength = 250, text = 'Type the English translation of the random word in Hebrew.').grid(row = 1, column = 1)
        ttk.Label(self.frame_header, wraplength = 300,
                  text = ("Hebrew Word", question)).grid(row = 2, column = 1)


        self.frame_content = ttk.Frame(master)
        self.frame_content.pack()

        ttk.Label(self.frame_content, text = 'English:').grid(row = 0, column = 1, padx = 5, sticky = 'sw')

        self.user_input = ttk.Entry(self.frame_content, text = "Your Answer?", width = 24)
        self.user_input.grid(row = 1, column = 1, padx = 5)

        ttk.Button(self.frame_content, text = 'Submit', command = self.submit).grid(row = 2, column = 1, padx = 5, pady = 5, sticky = 'e')
        ttk.Button(self.frame_content, text = 'Clear', command = self.clear).grid(row = 3, column = 0, padx = 5, pady = 5, sticky = 'w')
        ttk.Button(self.frame_content, text = 'Next', command = self.next).grid(row = 3, column = 2, padx = 5, pady = 5, sticky = 'w')

    def submit(self):
        self.answer = answer
        user_input = self.user_input
        if user_input == answer:
            print ("Correct")
        else:
            print ("!לא נכון ", "The answer is:", dictionary.keys(question))

    def clear(self):
        self.user_input.delete(0, 'end')

    def next(self):
        print (question)

1 Ответ

0 голосов
/ 22 апреля 2020

Следующие две строки должны быть удалены, поскольку они бесполезны для вашего приложения:

question = random.choice(list(dictionary.values())) 

answer = dictionary.keys() == question

Измените следующую строку в функции __init__():

ttk.Label(self.frame_header, wraplength = 300,
          text = ("Hebrew Word", question)).grid(row = 2, column = 1)

на:

self.question = ttk.Label(self.frame_header, wraplength=300)
self.question.grid(row=2, column=1)

Затем обновите функции next() и submit(), как показано ниже:

def submit(self):
    user_input = self.user_input.get().strip()
    if user_input == self.answer:
        print ("Correct")
    else:
        print ("!לא נכון ", "The answer is:", self.answer)

...

def next(self):
    # select a random choice (English phrase) from dictionary as question
    self.answer = random.choice(list(dictionary.keys()))
    self.question.config(text="Hebrew Word: "+dictionary[self.answer])

Наконец, вызовите next() в конце __init__(), чтобы показать первый вопрос:

def __init__(self, master):

    ...

    self.next()
...