6 простых шагов по созданию приложения с графическим интерфейсом для Flashcard для изучения французского языка на Python
Мы все были там. Изучение иностранного языка может оказаться непростой задачей. К счастью, нам на помощь приходит python. Я создал приложение с графическим интерфейсом Flashcard, которое помогает запоминать сложные слова, и на него можно ссылаться, чтобы сохранить их дольше. Еще одна замечательная проектная идея доктора Анжелы Ю.
В настройке пользовательского интерфейса на карточке высвечивается французское слово, затем пользователь может смотреть на французское слово в течение трех секунд, а затем переворачивается карточка, содержащая соответствующее английское слово.
Карточки служат отличным инструментом для тестирования и улучшения памяти за счет отработанного восстановления информации. Также чаще всего обращаются к инструменту для тех, кто хочет обновить / расширить свой словарный запас или вообще выучить новый язык.
Шаги по созданию графического интерфейса Flashcard
- Импорт библиотеки pandas, random и Tkinter
- Импорт французско-английской базы данных слов
- Определение глобальных констант
- Настройка пользовательского интерфейса
- Создание следующей карты и логика флип-карты
- Генерация французского слова и обработка исключений
Шаг 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()
Вы можете найти полный код здесь.