python tkinter学习 制作悬浮于桌面最上方的英语单词显示窗口

题主最近想考雅思,但是目前正在读研,课多,导师也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不打开文件情况下遍历文件数据

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值