根据本人背单词的习惯开发的小程序

  1. 复制单词信息:格式参考输入栏自带的内容
  2. 读取单词,按键1,按此顺序显示在LABEL上
  3. 剩下的自己探索吧

每次背单词都要打开编译软件很麻烦,可以试试tkinker打包直接生成.exe的程序直接运行;可以看看我的另一篇文章

https://blog.csdn.net/hu706789355/article/details/123006940https://blog.csdn.net/hu706789355/article/details/123006940

第一版:

#time:2022/2/14  20:26
#author:
import time
import tkinter as tk
from tkinter import ttk,messagebox as msg
import tkinter.font as tkfont
import random##########################——————————主要全局变量——————————###############################
DISTANCE=10
DISPLAY_MAX=8
ROW=0
EN_VISIABLE=0
tran_visi_flag=0
word_count=0
dis_trans_cnt=0
word_list_origin=[]
word_list_random=[]
class WordClass:def __init__(self,only,all):self.word_only=onlyself.word_all=all
############################-----------主要函数------------#############################
def ReadInytextBox():global dis_trans_cntdis_trans_cnt = 0outText.delete(1.0,'end')file=inText.get('1.0','end')#默认第一个字符就是第一个单词的开始global word_countglobal word_list_randomglobal tran_visi_flag# 如果outtext里有内容就读取,没有就显示已经读取的内容if len(inText.get('1.0','end'))>=10:word_count=0start_i = 0sum_of_str = file.count('');  # 统计字符个数,‘’为空字符,即任意字符都计数print('字符个数总计:', sum_of_str);for i in range(0, sum_of_str-2, 1):print(i,file[i])if file[i]=='\n':j=start_iprint('    ',i,j)while file[j]!='/' and file[j]!=' ':print(j,' ',file[j])j=j+1end_i=j-1word_count+=1print('word_count:',word_count)if len(word_list_origin)<word_count:word_list_origin.append(WordClass(file[start_i:end_i+1], file[start_i:i]))else:word_list_origin[word_count - 1].word_only= file[start_i:end_i+1]word_list_origin[word_count - 1].word_all = file[start_i:i]start_i=i+1outText.delete('1.0','end')word_list_random=word_list_origin[:]# for i in range(0,word_count):#     outText.insert('end', word_list_origin[i].word_all + word_list_origin[i].word_only + '\n')DisplayTabels(word_list_origin, 'all')tran_visi_flag=1return 0;
def ShuffleWords():global dis_trans_cntdis_trans_cnt = 0if len(word_list_random)==0:ReadInytextBox()word_list_temp=word_list_random[0:word_count]random.shuffle(word_list_temp)word_list_random[0:word_count]=word_list_temp[0:word_count]global tran_visi_flagtran_visi_flag=0outText.delete('1.0', 'end')print('random函数')print(word_count)# for i in range(0, word_count):#     outText.insert('end', word_list_random[i].word_only  + '\n')DisplayTabels(word_list_random, 'only_word')return 0
def SwitchTranslateVisity():global tran_visi_flagglobal dis_trans_cntdis_trans_cnt = 0if len(word_list_origin)==0:ReadInytextBox()outText.delete('1.0', 'end')print('cover_words函数')print(word_count)# for i in range(0, word_count):#     outText.insert('end', word_list_origin[i].word_only  + '\n')if tran_visi_flag==0:DisplayTabels(word_list_random, 'all')else:DisplayTabels(word_list_random, 'only_word')tran_visi_flag = 1 - tran_visi_flagreturn 0
def DisplayTabels(dis_list_class, mode):global v_listglobal label_word_listif mode=='all':for i in range(0,DISPLAY_MAX):if i<word_count:label_word_list[i] = dis_list_class[i].word_allv_list[i].set(label_word_list[i])else:v_list[i].set(' ')elif mode=='only_word':for i in range(0,DISPLAY_MAX):if i<word_count:label_word_list[i] = dis_list_class[i].word_onlyv_list[i].set(label_word_list[i])else:v_list[i].set(' ')elif mode=='OneNextOne':for i in range(0,DISPLAY_MAX):if i<word_count:if i<dis_trans_cnt:label_word_list[i] = dis_list_class[i].word_allv_list[i].set(label_word_list[i])else:label_word_list[i] = dis_list_class[i].word_onlyv_list[i].set(label_word_list[i])else:v_list[i].set(' ')#输入、输出TEXT不可见if EN_VISIABLE==0:outText.delete('1.0', 'end')inText.delete('1.0','end')outText.insert('end','当前读取单词个数    ','%s',word_count)return 0
##########################——————————初始化——————————##################################
root=tk.Tk()
root.title('背单词V20220303')
root.resizable(0,0)
Label1=tk.Label
#Label
label_list=[]
v_list=[]
label_word_list=[]
for i in range(0,DISPLAY_MAX):label_word_list.append('word: void')v_list.append(tk.StringVar())v_list[i].set(label_word_list[i])ft_label = tkfont.Font(family='Times New Roman', size=30, weight=tkfont.NORMAL)label_list.append(tk.Label(root,textvariable=v_list[i], font=ft_label,fg='green',justify='left',anchor='w',padx=0,width=40,relief='raised',borderwidth=0))# label_list[i].label_list[i].grid(row=ROW,padx=80,ipady=10)ROW += 1
# 输入窗口
global inText
global outText
inText = tk.Text(root, height=10, width=60)
inText.insert(0.0,
"accessory / æk’sesәri/n.配件、同谋 a.附属的\n"
"accommodate / ә’kɔmәdeit/vt.容纳;供应,供给\n"
"accord / ә’kɔ:d/n.条约vt.与…一致(~ with);给予\n"
"acknowledge / әk’nɔlidʒ/vt.承认;告知收到\n"
"acquaint / ә’kweint/vt.使认识,使了解\n"
"acquisition / ‘ækwi’ziʃәn/n. 收获\n"
"activate / ‘æktiveit/vt. 刺激,使活动\n")
inText.grid(row=ROW + 1, padx=DISTANCE, pady=DISTANCE, sticky='w')# 输出窗口
outText = tk.Text(root, height=10, width=60)
outText.insert(0.0, "输出单词567890")
outText.grid(row=ROW + 1, padx=DISTANCE, pady=DISTANCE, sticky='e')
# 设置 tag(暂时没用)
# outText.tag_config("tag_1", backgroun="yellow", foreground="red")
# ft=tkfont.Font(family='微软雅黑',size=10)
# outText.configure(ft)
# # outText.tag_add('tag_1',a1)
def NextDisTrans():if len(word_list_origin)==0:ReadInytextBox()global dis_trans_cntif dis_trans_cnt<=word_count :dis_trans_cnt+=1if dis_trans_cnt>word_count or dis_trans_cnt>DISPLAY_MAX:dis_trans_cnt=0ShuffleWords()print(dis_trans_cnt)DisplayTabels(word_list_random, 'OneNextOne')nextButton= ttk.Button(root, text='显示下一个单词的翻译', width=20, command=NextDisTrans)
nextButton.grid(row=ROW + 1, padx=DISTANCE, pady=DISTANCE, sticky=' ', ipady=10)readButton = ttk.Button(root, text='读取/顺序显示', width=40, command=ReadInytextBox)
readButton.grid(row=ROW + 3, padx=DISTANCE, pady=DISTANCE, sticky='w', ipady=10)
ranButton = ttk.Button(root, text='随机顺序测试', width=40, command=ShuffleWords)
ranButton.grid(row=ROW + 3, padx=DISTANCE, pady=DISTANCE, sticky=' ', ipady=10)
coverButton = ttk.Button(root, text='打开/关闭翻译', width=40, command=SwitchTranslateVisity)
coverButton.grid(row=ROW + 3, padx=DISTANCE, pady=DISTANCE, sticky='e', ipady=10)root.mainloop()

第二版,+键盘事件+单词读音+美化

#time:2022/2/14  20:26
#author:Hu_Guangliang
#
import time
import tkinter as tk
from tkinter import ttk
from tkinter import PhotoImage
import tkinter.font as tkfont
import random
from MP3_PLAYER import *
##########################——————————主要全局变量——————————###############################
tkinter_LABEL_XY_DISTANCE=10#行间距=字间距
tkinter_LABEL_LINE_MAX=8#最大显示单词数
tkinter_ROW=0#显示用的行号,递增
tkinter_mp3_BOTTONclass=[]
tkinter_LABELclass=[]
#Label
LABLE_temp_word=[]
LABEL_word=[]
STYLE_BOTTON_font=('OPPOSans R', 15, '')
STYLE_LABEL_font=('MiSans Demibold', 30, '')
STYLE_TEXT_font=('MiSans Regular', 10, '')
word_count=0
dis_trans_cnt=0word_list_origin=[]
word_list_buffer=[]root=tk.Tk()
root.title('背单词V20220414')
root.resizable(0,0)
#F5F6EE
#FFB000
#419FB7
#17456B
#0F1D2B
photo = tk.PhotoImage(file="image/img_play.png")# 调整图片尺寸适应按钮大小
photoimage = photo.subsample(100, 100)def handleKeyEvent(event):print(event)if event.keysym=='Up':NextDisTrans()if event.keysym=='Down':ShuffleWords()if event.keysym=='Left':ReadInytextBox()if event.keysym=='Right':SwitchTranslateVisity()if event.keysym=='Return':mp3_P(dis_trans_cnt)# 将主窗口与键盘事件连接
eventType = ["Key", "Control-Up", "Return", "Escape", "F1", "F2", "F3", "F4","F5", "F6", "F7", "F8", "F9", "F13", "F11", "F12", "Num_Lock", "Scroll_Lock","Caps_Lock", "Print", "Insert", "Delete", "Pause", "Prior", "Next", "BackSpace","Tab", "Cancel", "Control_L", "Alt_L", "Shift_L", "End", "Home", "Up", "Down","Left", "Right"]
for type in eventType:root.bind("<" + type + ">", handleKeyEvent)class WordClass:def __init__(self,only,all):self.word_only=onlyself.word_all=all
class BOTTON_CLASS():def __init__(self,data):self.num=dataself.botton_class=tk.Button(root, image=photo,text='', bg='#F5F6EE',width=50,height=50,relief='flat',command=self.play_class,)#def play_class(self):mp3_P(self.num)
############################-----------主要函数------------#############################
def ReadInytextBox():global dis_trans_cntoutText.delete(1.0,'end')file=inText.get('1.0','end')#默认第一个字符就是第一个单词的开始global word_countglobal word_list_buffer# 如果outtext里有内容就读取,没有就显示已经读取的内容if len(inText.get('1.0','end'))>=10:word_count=0start_i = 0sum_of_str = file.count('');  # 统计字符个数,‘’为空字符,即任意字符都计数# print('字符个数总计:', sum_of_str);for i in range(0, sum_of_str-2, 1):# print(i,file[i])if file[i]=='\n':j=start_i# print('    ',i,j)while file[j]!='/' and file[j]!=' ':# print(j,' ',file[j])j=j+1end_i=j-1word_count+=1# print('word_count:',word_count)if len(word_list_origin)<word_count:word_list_origin.append(WordClass(file[start_i:end_i+1], file[start_i:i]))else:word_list_origin[word_count - 1].word_only= file[start_i:end_i+1]word_list_origin[word_count - 1].word_all = file[start_i:i]start_i=i+1dis_trans_cnt = word_countoutText.delete('1.0','end')word_list_buffer= word_list_origin[:]# for i in range(0,word_count):#     outText.insert('end', word_list_origin[i].word_all + word_list_origin[i].word_only + '\n')DisplayTabels(word_list_buffer,word_count)return 0;
def ShuffleWords():global dis_trans_cntdis_trans_cnt = 0if len(word_list_buffer)==0:ReadInytextBox()word_list_temp= word_list_buffer[0:word_count]random.shuffle(word_list_temp)word_list_buffer[0:word_count]= word_list_temp[0:word_count]outText.delete('1.0', 'end')print('random函数')print(word_count)# for i in range(0, word_count):#     outText.insert('end', word_list_random[i].word_only  + '\n')DisplayTabels(word_list_buffer, dis_trans_cnt)return 0
def SwitchTranslateVisity():global dis_trans_cntif len(word_list_origin)==0:ReadInytextBox()outText.delete('1.0', 'end')print('cover_words函数')print(word_count)# for i in range(0, word_count):#     outText.insert('end', word_list_origin[i].word_only  + '\n')if dis_trans_cnt==0:dis_trans_cnt=word_countDisplayTabels(word_list_buffer, dis_trans_cnt)else:dis_trans_cnt=0DisplayTabels(word_list_buffer,dis_trans_cnt)return 0
def DisplayTabels(dis_list_class,dis_conut):global LABLE_temp_wordglobal LABEL_wordfor i in range(0, tkinter_LABEL_LINE_MAX):if i<word_count:if i<dis_conut:LABEL_word[i] = dis_list_class[i].word_allLABLE_temp_word[i].set(LABEL_word[i])else:LABEL_word[i] = dis_list_class[i].word_onlyLABLE_temp_word[i].set(LABEL_word[i])else:LABLE_temp_word[i].set(' ')#输入、输出TEXT不可见outText.delete('1.0', 'end')inText.delete('1.0','end')outText.insert('end','当前读取单词个数    ','%s',word_count)return 0def NextDisTrans():if len(word_list_origin)==0:ReadInytextBox()global dis_trans_cntif dis_trans_cnt<=word_count :dis_trans_cnt+=1if dis_trans_cnt>word_count or dis_trans_cnt>tkinter_LABEL_LINE_MAX:dis_trans_cnt=0ShuffleWords()DisplayTabels(word_list_buffer, dis_trans_cnt)def mp3_P(data_int):print(data_int)try:mp3_player(word_list_buffer[data_int].word_only)except:outText.insert(0.0, "没有音频文件")pass
##########################——————————初始化——————————##################################for i in range(0, tkinter_LABEL_LINE_MAX):LABEL_word.append('word: void')LABLE_temp_word.append(tk.StringVar())LABLE_temp_word[i].set(LABEL_word[i])# ft_label = tkfont.Font(family='MiSans Demibold', size=30, weight=tkfont.NORMAL)tkinter_LABELclass.append(tk.Label(root, textvariable=LABLE_temp_word[i], font=STYLE_LABEL_font, fg='#0F1D2B',bg='#F5F6EE', justify='left', anchor='w', padx=100, width=40, relief='raised', borderwidth=0))tkinter_LABELclass[i].grid(row=tkinter_ROW, padx=0, ipady=10)tkinter_mp3_BOTTONclass.append(BOTTON_CLASS(i))tkinter_mp3_BOTTONclass[i].botton_class.grid(row=tkinter_ROW, padx=10, pady=tkinter_LABEL_XY_DISTANCE, sticky='w', ipady=0)tkinter_ROW += 1
# # 输入窗口inText = tk.Text(root, height=10, width=40,font=STYLE_TEXT_font, )
inText.insert(0.0,
"accessory / æk’sesәri/n.配件、同谋 a.附属的\n"
"accommodate / ә’kɔmәdeit/vt.容纳;供应,供给\n"
"accord / ә’kɔ:d/n.条约vt.与…一致(~ with);给予\n"
"acknowledge / әk’nɔlidʒ/vt.承认;告知收到\n"
"acquaint / ә’kweint/vt.使认识,使了解\n"
"acquisition / ‘ækwi’ziʃәn/n. 收获\n"
"activate / ‘æktiveit/vt. 刺激,使活动\n")
inText.grid(row=tkinter_ROW + 1, padx=tkinter_LABEL_XY_DISTANCE, pady=tkinter_LABEL_XY_DISTANCE, sticky='w')# 输出窗口
outText = tk.Text(root, height=10, width=40,font=STYLE_TEXT_font, )
outText.insert(0.0, "输出单词567890")
outText.grid(row=tkinter_ROW + 1, padx=tkinter_LABEL_XY_DISTANCE, pady=tkinter_LABEL_XY_DISTANCE, sticky='e')
# 设置 tag(暂时没用)
# outText.tag_config("tag_1", backgroun="yellow", foreground="red")
# ft=tkfont.Font(family='微软雅黑',size=10)
# outText.configure(ft)
# # outText.tag_add('tag_1',a1)nextButton= tk.Button(root, text='显示下一个单词的翻译', width=20, bg='#419FB7',command=NextDisTrans,relief='ridge',font=STYLE_BOTTON_font)
nextButton.grid(row=tkinter_ROW + 1, padx=tkinter_LABEL_XY_DISTANCE, pady=tkinter_LABEL_XY_DISTANCE, sticky=' ', ipady=10)readButton = tk.Button(root, text='读取/顺序显示', width=20, bg='#419FB7',command=ReadInytextBox,relief='ridge',font=STYLE_BOTTON_font)
readButton.grid(row=tkinter_ROW + 3, padx=tkinter_LABEL_XY_DISTANCE, pady=tkinter_LABEL_XY_DISTANCE, sticky='w', ipady=10)
ranButton = tk.Button(root, text='随机顺序测试', width=20, bg='#419FB7',command=ShuffleWords,relief='ridge',font=STYLE_BOTTON_font)
ranButton.grid(row=tkinter_ROW + 3, padx=tkinter_LABEL_XY_DISTANCE, pady=tkinter_LABEL_XY_DISTANCE, sticky=' ', ipady=10)
coverButton = tk.Button(root, text='打开/关闭翻译', width=20, bg='#419FB7',command=SwitchTranslateVisity,relief='ridge',font=STYLE_BOTTON_font)
coverButton.grid(row=tkinter_ROW + 3, padx=tkinter_LABEL_XY_DISTANCE, pady=tkinter_LABEL_XY_DISTANCE, sticky='e', ipady=10)
print(player.get_volume())
player.set_volume(100)
print(player.get_volume())
#
# sss=tk.Scrollbar(root,orient='',background='red',width=100,borderwidth=100)
# sss.grid(row=tkinter_ROW + 3, pady=tkinter_LABEL_XY_DISTANCE)
#F5F6EE
#FFB000
#419FB7
#17456B
#0F1D2Broot.mainloop()

基于tkinter库python背单词GUI设计——单词越背越开心相关推荐

  1. 基于tkinter库的一个python简易GUI界面实现学生选课系统!

    如果你的2020年重启,你最想干什么?我想狠狠的扇自己一巴掌,为什么大一不好好读书,搞到现在大二多了才意识到读书的重要性,我第一件事就想把我大一的实训任务好好的认真做一做,所以我最近一段时间,我都在看 ...

  2. Python编写的猜数字小游戏~~~基于Tkinter库

    Python编写猜数字小游戏 编写猜数字小游戏 一.界面 1.PyQt5 2. wxPython 3. PyGTK 二.Tkinter功能 ① 15种核心组件 ② 组件的放置和排版(pack,grid ...

  3. 基于tkinter库txt文件操作的Python界面化图书管理系统

    Python图书管理系统 一.简介 该系统主要通过tkinter库实现图书管理系统,该项目包含对文件的操作,对字符串解析的python知识点 二.系统实现功能介绍及使用方法 1.登录功能: 不同用户通 ...

  4. Tkinter 库---python小应用 贷款利息计算器

    用Tkinter库制作一个小的[贷款利息计数器]应用 #实现GUI可交互式的界面 *输入年利率 *输入贷款年数 *输入贷款总金 *显示月应付金额 *显示总应付金额 *设置一个Button达到启动计算和 ...

  5. python小练习--GUI设计

    文章目录 练习1:canvas画布的使用 练习2:练习三个布局管理器 1.grid 布局管理器 2.pack 布局管理器 3.place布局管理器 练习3:鼠标事件和键盘事件用法 练习4:lambda ...

  6. 了解如何使用Tkinter在Python中创建GUI

    Do you want to create a graphic user interface for your Python program? You should learn how to use ...

  7. 【数据平台】基于pymysql库python连接mysql

    1.场景:python连接mysql的API使用pymysql库 https://pypi.python.org/pypi/PyMySQL/ 安装:pip install pymysql 即可 2.代 ...

  8. 基于Tkinter利用python实现颜色空间转换程序

    主要基于colorsys实现,例子是从hls转换到rgb,假设要换颜色空间非常easy仅仅须要改动一个函数 用到了Scale和Canvas组件 代码例如以下: from Tkinter import ...

  9. 【数据平台】基于pyhs2库Python作为client driver连接HiveServer

    1.安装pyhs2 A Python client driver for HiveServer2 is available at https://github.com/BradRuderman/pyh ...

最新文章

  1. 【Visual Studio 扩展工具】如何在ComponentOneFlexGrid树中显示RadioButton
  2. 编程语言发展70年,用50种不同语言输出「Hello World」
  3. STL中的双向队列deque
  4. JavaDoc注释的使用
  5. GZFramwork数据库层《四》单据主从表增删改查
  6. Android菜鸟的成长笔记(28)——Google官方对Andoird 2.x提供的ActionBar支持
  7. yii2 ajax分页,Yii框架分页技术实例分析
  8. app inventor离线版_小鸡漫画app手机版下载_小鸡漫画好看的漫画手机版下载
  9. linux 抓包工具_03-Python爬虫工程师-抓包工具
  10. vantabs多页渲染_选择引擎渲染页面
  11. do{} while(0)
  12. 又一打包工具介绍:Installshield 打包安装包心得
  13. foxmail创建html模板,化繁为简--轻轻松松用模板之FOXMAIL篇
  14. Charles安卓8手机抓包
  15. js中英文字符与中文字符长度区别
  16. 雅虎被收购后,Tumblr 前途未卜,准备在所有博客中引入广告
  17. 温控-Thermal
  18. 摄影测量单像后方交会实验报告
  19. 信息安全导论 实验一 古典密码学
  20. wdatepicker设置时间范围_外卖配送范围由谁决定?这三个划分原则请遵循

热门文章

  1. 新书榜第一的《图解产品》,帮助内卷中的产品经理实现跨越式发展!
  2. H5 移动端文件下载的方法
  3. 深度学习与神经网络关系
  4. win10 ping命令与telnet命令使用详解
  5. 关于程序员35岁的坎:年龄不是挡板,图灵学院视频下载
  6. 微信朋友圈文章可能构成「现有技术公开」而导致专利权丧失
  7. 无聊之作-纸牌接龙(排火车)结束平均次数
  8. IntelliJ IDEA 逆向工程
  9. CentOS 7上安装翻译软件
  10. vue 分页查询条件的缓存