基于Tkinter的背单词软件
设计思路
- 页面布局:主要分为左中右部分 a. 正确拼写区域b. 单词拼写区域c. 错误拼写区域
- 事件监听:通过给功能按钮绑定事件,来实现不同的功能,如:提交输入答案、更换题目等。
涉及知识点
- 开发工具:Python3.8 , PyCharm2022
- Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。
- pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
- Button按钮控件是一个标准的tkinter控件。按钮上可以显示文字或者图片作为提示信息。文字只能使用一种字体以及颜色。按钮的最主要作用是被点击后,可以调用指定的回调函数,完成特定的功能。比如,关闭窗口、执行命令等。
- 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())