DevGang
Авторизоваться

6 простых шагов по созданию приложения с графическим интерфейсом для Flashcard для изучения французского языка на Python 

Мы все были там. Изучение иностранного языка может оказаться непростой задачей. К счастью, нам на помощь приходит python. Я создал приложение с графическим интерфейсом Flashcard, которое помогает запоминать сложные слова, и на него можно ссылаться, чтобы сохранить их дольше. Еще одна замечательная проектная идея доктора Анжелы Ю.

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

Карточки служат отличным инструментом для тестирования и улучшения памяти за счет отработанного восстановления информации. Также чаще всего обращаются к инструменту для тех, кто хочет обновить / расширить свой словарный запас или вообще выучить новый язык.

Шаги по созданию графического интерфейса Flashcard

  1. Импорт библиотеки pandas, random и Tkinter
  2. Импорт французско-английской базы данных слов
  3. Определение глобальных констант
  4. Настройка пользовательского интерфейса
  5. Создание следующей карты и логика флип-карты
  6. Генерация французского слова и обработка исключений

Шаг 1. Импорт библиотеки pandas, random и math

import pandas
BACKGROUND_COLOR = "#B1B2DD" #Чтобы установить цвет фона
, импортируйте случайный
from tkinter import *
import pandas as pd

Шаг 2. Импорт базы данных французских и английских слов

Базу данных можно найти в Интернете, тем не менее, я включил ее в свое репо. Вы можете найти это здесь.

Шаг 3: определение глобальных констант

to_learn = {}
current_card = {}

Мы определяем две глобальные константы to_learn, которые будут содержать репозиторий данных французских слов.

Другой будет current_card, который будет содержать текущую карту в графическом интерфейсе flashcard.

Шаг 4: Настройка пользовательского интерфейса

window = Tk()
window.title("Flashcard App")
window.config(padx=50, pady=50, bg=BACKGROUND_COLOR)
flip_timer = window.after(3000, func=flip_card) # 3000 миллисекунд = 3 секунды

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"))
# Позиции связаны с холстом, поэтому 400 будет наполовину шириной
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)

cross_image = PhotoImage(file="./images/wrong.png")
unknown_button = Button(image=cross_image, command = next_card)
unknown_button.grid(row=1, column=0, sticky="W")

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

next_card()
window.mainloop()

Что вы можете найти здесь. Пользователь может изменять размеры и цвета холста или включать другие изображения для правильных и неправильных вывесок. Пользователь нажимает правильную или неправильную кнопку, когда он закончил со словом или когда он уже знает английский перевод французского слова.

Позже мы определим две функции «next_card» и «is_known».

Шаг 5: формирование следующей карты и логика переворачивания карты

def next_card():
    global current_card, flip_timer
    window.after_cancel(flip_timer)
    current_card = random.choice(to_learn)
    # французское слово = случайная пара['French']
    canvas.itemconfig(card_title, text="French", fill="black")
    canvas.itemconfig(card_word, text=current_card["French"], 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 = "English", fill = "white")
    canvas.itemconfig(card_word, text=current_card["English"], fill = "white")
    canvas.itemconfig(card_background, image=card_back_img)

def is_known():
    to_learn.remove(current_card)
    print(len(to_learn))
    data = pd.DataFrame(to_learn)
    data.to_csv("data/words_to_learn.csv", index=False)
    # index = false отбрасывает номера индексов
    next_card()

Мы определяем три функции next_card (), flip_card () и is_known (). next_card вызывается, когда пользователь нажимает кнопку.

Мы определяем таймер переворота, который определяет время переворота карточек, и метод after_cancel, который принимает функцию flip_card и устанавливает таймер на 3 секунды (3000 миллисекунд).

Метод flip_card () переворачивает карточку на английский перевод французского слова. Обратите внимание, что цвет заливки был изменен, чтобы обозначить разницу между двумя карточками.

Наконец, у нас есть функция is_known (), которая удаляет уже изученную карту пользователем и создает базу данных изученных карт. (words_to_learn.csv)

Альтернативный метод с использованием iterrows

data = pd.read_csv("./data/french_words.csv")
word_dict = {row.French:row.English for (index, row) in df.iterrows()}
#word_dict = df.to_dict(orient="records")
print(word_dict)

Шаг 6. Создание французского слова и обработка исключений

try: # попробуйте запустить эту строку кода
    data = pandas.read_csv("data/words_to_learn.csv")
except FileNotFoundError:
    # Если мы впервые запускаем его
    # файл words_to_learn.csv может отсутствовать
    # и может  всплыть FileNotFoundError
    original_data = pandas.read_csv("data/french_words.csv")
    print(original_data)
    to_learn = original_data.to_dict(orient="records")
else:
    to_learn = data.to_dict(orient="records")
# data = pd.read_csv("./data/words_to_learn.csv")
# word_dict = {row.French:row.English for (index, row) in df.iterrows()}
# выдает список словарей, содержащих французское слово и английский перевод
# print(word_dict)

Поскольку мы вносим изменения в words_to_learn.csv. При первом запуске этот файл не будет существовать, поэтому мы перехватываем эту ошибку, сначала пытаясь прочитать words_to_learn.csv.

try: # попробуйте запустить эту строку кода
    data = pandas.read_csv("data/words_to_learn.csv")

В случае исключения, которое было бы FileNotFoundError при первом запуске, мы бы прочитали исходные данные, которые являются french_words.csv.

Кроме того, не забудьте указать в конце кода, чтобы холст не исчезал.

mainloop () сообщает Python, что нужно запустить цикл событий Tkinter. Этот метод прослушивает события, такие как нажатия кнопок или нажатия клавиш, и блокирует выполнение любого кода, который идет после него, до тех пор, пока окно, для которого он вызван, не будет закрыто. Идите вперед и закройте созданное вами окно, и вы увидите новое приглашение, отображаемое в оболочке:

window.mainloop()

Вы можете найти полный код здесь.

Источник:

#Python
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В подарок 100$ на счет при регистрации

Получить