基于Tkinter的python背单词软件

基于Tkinter的背单词软件

设计思路

  1. 页面布局:主要分为左中右部分 a. 正确拼写区域b. 单词拼写区域c. 错误拼写区域
  2. 事件监听:通过给功能按钮绑定事件,来实现不同的功能,如:提交输入答案、更换题目等。

涉及知识点

  1. 开发工具:Python3.8 , PyCharm2022
  2. Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。
  3. pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
  4. Button按钮控件是一个标准的tkinter控件。按钮上可以显示文字或者图片作为提示信息。文字只能使用一种字体以及颜色。按钮的最主要作用是被点击后,可以调用指定的回调函数,完成特定的功能。比如,关闭窗口、执行命令等。
  5. Label控件,用来显示指定的窗口中的文本和图像。

数据文件

(包括共5500个单词)
在这里插入图片描述

运行截图

初始界面
在这里插入图片描述

提交单词(正确)
在这里插入图片描述

提交单词(错误)
在这里插入图片描述

换题
在这里插入图片描述

核心代码

# Application初始化
def __init__(self, master=None):
    super().__init__(master)
    self.dictionary = Dictionary()
    self.text = StringVar()
    self.master = master
    self.bgcolor = "#ecf2f1"
    self.pack()
    self.create_widget()

# 绘制页面
def create_widget(self):
    frame_right = Frame(root, width=250, height=500, bg='#bfdccf', padx=10)
    frame_right.pack(side='left')
    frame_main = Frame(root, padx=10)
    frame_main.pack(side='left')
    frame_wrong = Frame(root, width=250, height=500, bg='#e9bcc1', padx=10)
    frame_wrong.pack(side='left')
    # 创建单词显示区
    self.text.set(self.dictionary.get_word_text())
    self.word_show = Label(frame_main, textvariable=self.text, width=25,                           height=10, justify='center', anchor='center',                           font=('微软雅黑', 18),  fg='white', bg='grey',                           padx=20, pady=10) 
    self.word_show.pack()
    # 输入单词区
    self.entry_word = Entry(frame_main)
    self.entry_word.pack(pady=5)
    # 提交按钮
    button = Button(frame_main, text='提交', command=self.submit)
    button.pack(side=LEFT, padx=100, pady=5)
    # 换题按钮
    change_button = Button(frame_main, text='换题', command=self.change)
    change_button.pack(side=LEFT, padx=100, pady=5)
    # 正确单词
    right_label = Label(frame_right)    right_label.pack()
    self.right_list = Listbox(frame_right, width=30, height=20)
    self.right_list.pack()

    wrong_label = Label(frame_wrong)    wrong_label.pack()
    self.wrong_list = Listbox(frame_wrong, width=30, height=20)
    self.wrong_list.pack()

# 添加书籍信息事件
def add_book(self):
    values = []
    for val in self.val_arr:
        v = val.get()
        if v == '':
            messagebox.showinfo('提示', '请输入内容')
            return
        values.append(v)
    for book in self.tree.get_children():
        no = self.tree.item(book)['values'][0]
        if no == values[0]:
            messagebox.showinfo('提示', '编号已经存在')
            return
    self.tree.insert('', 'end', values=values)
    for val in self.val_arr:
        val.set('')
# 词典类
class Dictionary:
    def __init__(self):
        self.dict = pd.read_excel("words.xlsx")
        self.word = self.dict.sample(1, axis=0)
        print(self.word)
        self.right = pd.DataFrame()
        self.wrong = pd.DataFrame()

    def random_set_a_word(self):
        self.word = self.dict.sample(1, axis=0)
        print(self.word)

    def get_now_word(self):
        return self.word.单词.values[0]

    def get_now_word_chinese(self):
        return self.word.解释.values[0]
    def word_right(self):
        self.dict.drop(self.word.index)  # 删除背过的单词
        self.right = pd.concat([self.right, self.word])
        self.random_set_a_word()

    def word_wrong(self):
        self.wrong = pd.concat([self.wrong, self.word])

    def get_word_text(self):
        word = ""
        for c in self.word.单词.values[0]:
            if random.random() > 0.5:
                word += c + ' '
            else:
                word += ' _ '
        return word + "\n\n" + self.word.音标.values[0] + "\n\n" + self.word.解释.values[0]
# 单词提交事件
def submit(self):
    if self.entry_word.get() == self.dictionary.get_now_word():
        self.right_list.insert(END, self.dictionary.get_now_word() + self.dictionary.get_now_word_chinese())
        self.dictionary.word_right()
        self.text.set(self.dictionary.get_word_text())

        self.entry_word.delete(0, END)
    else:
        self.dictionary.word_wrong()
        self.wrong_list.insert(END, self.dictionary.get_now_word() + self.dictionary.get_now_word_chinese())

# 单词更换事件
def change(self):
    self.dictionary.random_set_a_word()
    self.text.set(self.dictionary.get_word_text())


 
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值