题主最近想考雅思,但是目前正在读研,课多,导师也push,所以可专注背单词的时间较少,所以想利用看电脑的时候顺便背背单词,但是网上只找到一个要开会员的软件。题主觉得这种程序不值得付费(好好好,其实就是题主穷)所以学习tkinter,制作一个简单的程序用于学习。
编写代码过程
1.创建tk对象
from tkinter import *
tk = Tk()
tk.geometry('400x100+1000+100')
tk.title('')
tk.iconphoto(False, tkinter.PhotoImage(file='R-C.png'))
定义一个400x100的窗口,位于1000,100像素处,设置title为空(尽量让界面简洁)
tk.iconbitmap('R-C.ico')
tk.iconphoto(False, tkinter.PhotoImage(file='R-C.png'))
以上两个语句设置窗口图标,‘R-C.png’为想要设置的图片
2.设置窗口透明化
该部分参考博主dhjabc_1dhjabc_1dhjabc_1的窗口透明化教程。后文有链接,可跳转学习。
def on_resize(evt):
tk.configure(width=evt.width, height=evt.height)
canvas.create_rectangle(0,0,canvas.winfo_width(),canvas.winfo_height(),fill=TRANSCOLOUR, outline=TRANSCOLOUR)
tk.wm_attributes('-transparentcolor', TRANSCOLOUR)
tk.wm_attributes("-topmost", 1)
#tk.overrideredirect(True) #去边框
tk.bind('<Configure>', on_resize)
canvas = Canvas(tk)
tk.winfo_width()
canvas.pack(fill=BOTH, expand=Y)
# canvas.config(highlightthickness=0)
tk.update()
3.利用xlwings不打开文件的情况下读取excel文件
之所以利用xlwings是因为这个包可读取的excel拓展名多,xls和xlsx都可以。
app = xw.App(visible=False, add_book=False) # xlwings不打开文件的情况下操作
book = app.books.open("word8000.xls") # file_path 为文件路径
sheet = book.sheets['Sheet1'] # sheet_name 为表名称
loc = random.randint(1, sheet.range(1, 1).end('down').row + 1)
text1 = sheet.range(loc, 1).value
text2 = sheet.range(loc, 2).value
# print(text1, text2)
book.close()
app.quit()
4.利用tkinter的canvas画布进行文本显示
因为目前只有dhjabc_1博主利用canvas开发出了真正背景透明化,所以文本显示基于canvas进行显示。
在canvas上显示文本的函数为create_text().后面附上了create_text组件参数构成的讲解链接。
canvas_obj1 = canvas.create_text(200, 30, text=text1, font=('Times New Roman', 30), fill='DarkOrange',
justify=CENTER)
canvas_obj2 = canvas.create_text(200, 70, text=text2, font=('Times New Roman', 15), fill='PaleVioletRed',
justify=CENTER)
5.文本更新切换
题主这方面查阅众多方式,最后只能用暴力破解法,利用after函数不断随机读取excel文件数据,在canvas上create_text进行显示,也因此本算法运行效率较低,待以后或他人润色。
首先创先一个用于更新canvas上更新文本的函数refreshword
def refreshText():
global loc,canvas_obj1,canvas_obj2
app = xw.App(visible=False, add_book=False) # xlwings不打开文件的情况下操作
book = app.books.open("word8000.xls") # file_path 为文件路径
sheet = book.sheets['Sheet1'] # sheet_name 为表名称
loc = random.randint(1, sheet.range(1, 1).end('down').row + 1)
text1 = sheet.range(loc, 1).value
text2 = sheet.range(loc, 2).value
# print(text1, text2)
book.close()
app.quit()
canvas.delete(canvas_obj1)
canvas.delete(canvas_obj2)
canvas_obj1 = canvas.create_text(200, 30, text=text1, font=('Times New Roman', 30), fill='DarkOrange',
justify=CENTER)
canvas_obj2 = canvas.create_text(200, 70, text=text2, font=('Times New Roman', 15), fill='PaleVioletRed',
justify=CENTER)
tk.update()
tk.after(5000, refreshText)
其中,loc,canvas_obj1,canvas_obj2务必定义为全局变量,不然会导致传输错误。
利用tk.after()进入文本更新循环
tk.after(5000,refreshText)
6.输出结果
全部代码
import random
from tkinter import *
import tkinter
import xlwings as xw
global loc,canvas_obj1,canvas_obj2
loc = 1
def on_resize(evt):
tk.configure(width=evt.width, height=evt.height)
canvas.create_rectangle(0, 0, canvas.winfo_width(), canvas.winfo_height(), fill=TRANSCOLOUR, outline=TRANSCOLOUR)
def refreshText():
global loc,canvas_obj1,canvas_obj2
app = xw.App(visible=False, add_book=False) # xlwings不打开文件的情况下操作
book = app.books.open("word8000.xls") # file_path 为文件路径
sheet = book.sheets['Sheet1'] # sheet_name 为表名称
loc = random.randint(1, sheet.range(1, 1).end('down').row + 1)
text1 = sheet.range(loc, 1).value
text2 = sheet.range(loc, 2).value
# print(text1, text2)
book.close()
app.quit()
canvas.delete(canvas_obj1)
canvas.delete(canvas_obj2)
canvas_obj1 = canvas.create_text(200, 30, text=text1, font=('Times New Roman', 30), fill='DarkOrange',
justify=CENTER)
canvas_obj2 = canvas.create_text(200, 70, text=text2, font=('Times New Roman', 15), fill='PaleVioletRed',
justify=CENTER)
tk.update()
tk.after(5000, refreshText)
if __name__ == '__main__':
TRANSCOLOUR = 'gray'
tk = Tk()
tk.geometry('400x100+1000+100')
tk.title('')
tk.iconphoto(False, tkinter.PhotoImage(file='R-C.png'))
tk.wm_attributes('-transparentcolor', TRANSCOLOUR)
tk.wm_attributes("-topmost", 1)
tk.overrideredirect(True)
tk.bind('<Configure>', on_resize)
canvas = Canvas(tk)
tk.winfo_width()
canvas.pack(fill=BOTH, expand=Y)
# canvas.config(highlightthickness=0)
tk.update()
app = xw.App(visible=False, add_book=False) # xlwings不打开文件的情况下操作
book = app.books.open("word8000.xls") # file_path 为文件路径
sheet = book.sheets['Sheet1'] # sheet_name 为表名称
loc = random.randint(1, sheet.range(1, 1).end('down').row + 1)
text1 = sheet.range(loc, 1).value
text2 = sheet.range(loc, 2).value
# print(text1, text2)
book.close()
app.quit()
canvas_obj1 = canvas.create_text(200, 30, text=text1, font=('Times New Roman', 30), fill='DarkOrange',
justify=CENTER)
canvas_obj2 = canvas.create_text(200, 70, text=text2, font=('Times New Roman', 15), fill='PaleVioletRed',
justify=CENTER)
tk.after(5000,refreshText)
tk.mainloop()
暂时不方便录屏,但是确实可以始终浮于最上方字母不断切换。
过程学习
下面这位博主对Label组件的讲解十分的详细,即使题主最后程序中没用到label,也值得在学习tkinter的过程中看一看。
https://blog.csdn.net/qq_41556318/article/details/85079411?spm=1001.2014.3001.5502
下面这位博主对label美化的讲解也十分的细致
https://blog.csdn.net/weixin_62651706/article/details/125911027
列一下用于窗口显示的一些优化,主要是字体颜色
pack组件作用
https://blog.csdn.net/lnaruto1234/article/details/89501824
窗口设置方法
https://blog.csdn.net/jzwalliser/article/details/126927367
tkinter窗口透明化
https://blog.csdn.net/dhjabc_1/article/details/116795808
after使用方法
tkinter after方法_华岭羊仔的博客-CSDN博客
类创建错误原因以及解决方法
Python运行时出现: takes no arguments错误提示_lenatu的博客-CSDN博客
python tkinter canvas create_text修改文字大小-CSDN博客
tkinter自动更新方式
tkinter窗口中组件(label、text等)自动更新、动态刷新、实时更新功能实现_tk.label更新文字-CSDN博客
利用conda打包的方式
使用Anaconda将Python打包成exe文件(超详细)_anaconda打包exe-CSDN博客
基于python+tkinter+canvas实现天降棒棒糖,生活甜甜蜜蜜_tkinter canvas after_dhjabc_1的博客-CSDN博客dhjabc_1python+tkinter+canvas实现天降棒棒糖,生活甜甜蜜蜜_tkinter canvas after_dhjabc_1的博客-CSDN博客
存入ball之后页面显示50个,不是50轮流
canvas使用
一文讲透 tkinter Canvas 控件_create_line参数_@魏大大的博客-CSDN博客
pandas的read_excel使用(read_excel读取的是dataframe文件)
https://blog.csdn.net/RitaAndWakaka/article/details/108366203
dataframe文件遍历
第17篇:Pandas-遍历DataFrame对象 - 知乎 (zhihu.com)
dataframe数据结构
https://www.runoob.com/pandas/pandas-dataframe.html
xlwings遍历读取excel文件数据
https://www.5axxw.com/questions/simple/miuauh
xlwings不打开文件情况下遍历文件数据