Created
February 10, 2022 07:30
-
-
Save Jithender5913/69a77b85930f890c97e20b791fdec1b7 to your computer and use it in GitHub Desktop.
Flash card GUI App using Python Tkinter and pandas library
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from tkinter import * | |
import pandas | |
import random | |
BACKGROUND_COLOR = "#B1DDC6" | |
current_card = {} | |
to_learn = {} | |
# ---------------------------- Step 2 - Create New Flash Cards ------------------------------- # | |
try: | |
data = pandas.read_csv("data/words_to_learn.csv") | |
except FileNotFoundError: | |
original_data = pandas.read_csv("data/french_words.csv") | |
to_learn = original_data.to_dict(orient="records") | |
else: | |
to_learn = data.to_dict(orient="records") | |
def next_card(): | |
global current_card, flip_timer | |
window.after_cancel(flip_timer) | |
current_card = random.choice(to_learn) | |
canvas.itemconfig(card_title, text="French", fill="black") | |
canvas.itemconfig(card_word, text=current_card["French"], fill="black") | |
canvas.itemconfig(card_background, image=front_image) | |
flip_timer = window.after(3000, func=flip_card) # 3000 milliseconds equal to 3 seconds | |
# ---------------------------- Step 3 - Flip the Flash Cards ------------------------------- # | |
def flip_card(): | |
global current_card | |
canvas.itemconfig(card_title, text="English", fill="white") | |
canvas.itemconfig(card_word, text=current_card["English"], fill="white") | |
canvas.itemconfig(card_background, image=back_image) | |
# ---------------------------- Step 4 - Saving the data in Csv file ------------------------------- # | |
def is_known(): | |
to_learn.remove(current_card) | |
data = pandas.DataFrame(to_learn) | |
# To avoid multiple column numbers to be shown in csvfile, keep index as False below, | |
data.to_csv("data/words_to_learn.csv", index=False) | |
next_card() | |
# ---------------------------- Step 1 - Create the User Interface (UI) with Tkinter ------------------------------- # | |
window = Tk() | |
window.title("Welcome to Flash cards") | |
window.config(padx=50, pady=50, bg=BACKGROUND_COLOR) | |
flip_timer = window.after(3000, func=flip_card) # 3000 milliseconds equal to 3 seconds | |
window_label = Label(text="French", font=("Arial", 16, "bold"), bg="white", fg="black") | |
window_label.grid(row=2, column=1) | |
canvas = Canvas(height=526, width=800) | |
front_image = PhotoImage(file="card_front.png") | |
back_image = PhotoImage(file="card_back.png") | |
card_background = canvas.create_image(400, 260, image=front_image) | |
card_title = canvas.create_text(400, 150, text="", font=("Arial", 40, "italic")) | |
card_word = canvas.create_text(400, 263, text="", font=("Arial", 60, "bold")) | |
canvas.config(bg=BACKGROUND_COLOR, highlightthickness=0) | |
canvas.grid(column=0, row=0, columnspan=2) | |
right_image = PhotoImage(file="right.png") | |
right_button = Button(image=right_image, bg="white", highlightthickness=0, command=is_known) | |
right_button.grid(row=1, column=1) | |
wrong_image = PhotoImage(file="wrong.png") | |
wrong_button = Button(image=wrong_image, highlightthickness=0, command=next_card) | |
wrong_button.grid(row=1, column=0) | |
# flipping the card | |
english_back_image = PhotoImage(file="card_back.png") | |
next_card() | |
window.mainloop() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment