python随机显示四级词汇

python实现一个浮动窗口随机显示四级单词在桌面跑来跑去

实现一个浮动窗体随机显示四级单词在windows桌面置顶移动

tkinter库来创建窗口和显示单词,以及random库来随机选择单词。 使用after方法来定时更新窗口的位置,实现单词窗口的慢慢移动效果

使用pandas读取Excel文件,并将每行的单词和释义对应关系存储在一个字典中

实现鼠标悬停时显示对应的解释,或者直接显示对应解释FloatingWordWindow类中添加一个标签来显示解释,并在鼠标进入标签时更新解释内容

鼠标悬停的时候显示对应的解释,也就是对应键的值 不悬停的时候,不显示解释,返回显示随机单词 wraplength是自动换行

使用虚拟环境执行 E:\pycharm\anaconda\python.exe vocabulary.py

后台执行 E:\pycharm\anaconda\python.exe vocabulary.py & win不可用 在Linux或Mac系统下,你可以使用&符号

在Windows系统下,你可以使用start命令来启动一个新的窗口并在其中运行脚本,然后关闭该窗口,脚本将在后台继续执行。例如:

start /B E:\pycharm\anaconda\python.exe vocabulary.py 也不行

powershell可以

 cd "E:\pythonProject\other"
Start-Process -FilePath "E:\pycharm\anaconda\python.exe" -ArgumentList "vocabulary.py" -WindowStyle Hidden

初始版本

import tkinter as tk
import random
import pandas as pd
​
class FloatingWordWindow:
    def __init__(self, master):
        self.master = master
        self.master.overrideredirect(True)  # 隐藏标题栏和边框
        self.master.attributes('-topmost', True)  # 置顶窗口
        self.master.attributes('-alpha', 0.7)  # 设置透明度
        self.master.geometry('200x50+100+100')  # 初始位置和大小
        self.word_label = tk.Label(self.master, font=('Arial', 20))
        self.word_label.pack(expand=True)
        self.move_window()
​
    def move_window(self):
        x = random.randint(0, self.master.winfo_screenwidth() - self.master.winfo_width())
        y = random.randint(0, self.master.winfo_screenheight() - self.master.winfo_height())
        self.master.geometry(f'+{x}+{y}')
        self.master.after(3000, self.move_window)  # 每隔3秒更新一次位置
​
    def update_word(self):
        words = ['apple', 'banana', 'orange', 'grape', 'watermelon']  # 替换为你的四级单词列表
        df=pd.read_excel("大学英语四级词汇完整版带音标-顺序版.xlsx")
        # 提取单词和释义列的内容
        word_column = df.columns[0]  # 第一列是单词列
        meaning_column = df.columns[1]  # 第二列是释义列
        # 创建一个字典,将单词和释义对应关系存储起来
        word_meaning_dict = dict(zip(df[word_column], df[meaning_column]))
        # 将字典的键转换为列表
        words_list = list(word_meaning_dict.keys())
        # 随机选择一个单词
        random_word = random.choice(words_list)
        self.word_label.config(text=random_word)
        # 绑定鼠标悬停事件
        self.word_label.bind("<Enter>",
                             lambda event, word=random_word: self.show_meaning(event, word, word_meaning_dict))
        self.word_label.bind("<Leave>", lambda event: self.hide_meaning(random_word))  # 绑定鼠标移出事件
        self.master.after(3000, self.update_word)  # 每隔3秒更新一次单词
    def show_meaning(self, event, word, word_meaning_dict):
        meaning = word_meaning_dict.get(word, "Meaning not found")
        self.word_label.config(text=f"{meaning}",font=('Arial', 10),wraplength=150)
​
    def hide_meaning(self,random_word):
        self.word_label.config(text=random_word,font=('Arial', 20),wraplength=150)  # 清空文本
def main():
    root = tk.Tk()
    root.attributes('-toolwindow', True)  # 隐藏任务栏图标
    root.attributes('-alpha', 0.7)  # 设置透明度
    root.geometry('200x50+150+150')  # 初始位置和大小
    app = FloatingWordWindow(root)
    app.update_word()
    root.mainloop()
​
if __name__ == '__main__':
    main()

优化这个代码让excel读取只运行一次

import tkinter as tk
import random
import pandas as pd
​
class FloatingWordWindow:
    def __init__(self, master):
        self.master = master
        self.master.overrideredirect(True)  # 隐藏标题栏和边框
        self.master.attributes('-topmost', True)  # 置顶窗口
        self.master.attributes('-alpha', 0.7)  # 设置透明度
        self.master.geometry('200x50+100+100')  # 初始位置和大小
        self.word_label = tk.Label(self.master, font=('Arial', 20))
        self.word_label.pack(expand=True)
        self.load_word_meanings()  # 加载单词和释义
        self.move_window()
​
    def load_word_meanings(self):
        df = pd.read_excel("大学英语四级词汇完整版带音标-顺序版.xlsx")
        self.word_meaning_dict = dict(zip(df[df.columns[0]], df[df.columns[1]]))  # 单词和释义对应的字典
​
    def move_window(self):
        x = random.randint(0, self.master.winfo_screenwidth() - self.master.winfo_width())
        y = random.randint(0, self.master.winfo_screenheight() - self.master.winfo_height())
        self.master.geometry(f'+{x}+{y}')
        self.master.after(3000, self.move_window)  # 每隔3秒更新一次位置
​
    def update_word(self):
        random_word = random.choice(list(self.word_meaning_dict.keys()))  # 随机选择一个单词
        self.word_label.config(text=random_word)
        # 绑定鼠标悬停事件
        self.word_label.bind("<Enter>",
                             lambda event, word=random_word: self.show_meaning(event, word))
        self.word_label.bind("<Leave>", lambda event: self.hide_meaning(random_word))  # 绑定鼠标移出事件
        self.master.after(3000, self.update_word)  # 每隔3秒更新一次单词
​
    def show_meaning(self, event, word):
        meaning = self.word_meaning_dict.get(word, "Meaning not found")
        self.word_label.config(text=f"{meaning}", font=('Arial', 10), wraplength=150)
​
    def hide_meaning(self, word):
        self.word_label.config(text=word, font=('Arial', 20), wraplength=150)  # 清空文本
​
def main():
    root = tk.Tk()
    root.attributes('-toolwindow', True)  # 隐藏任务栏图标
    root.attributes('-alpha', 0.7)  # 设置透明度
    root.geometry('200x50+150+150')  # 初始位置和大小
    app = FloatingWordWindow(root)
    app.update_word()
    root.mainloop()
​
if __name__ == '__main__':
    main()
​

优化二 悬停显示

import tkinter as tk
import random
import pandas as pd
​
class FloatingWordWindow:
    def __init__(self, master):
        self.master = master
        self.master.overrideredirect(True)  # 隐藏标题栏和边框
        self.master.attributes('-topmost', True)  # 置顶窗口
        self.master.attributes('-alpha', 0.7)  # 设置透明度
        self.master.geometry('200x50+100+100')  # 初始位置和大小
        self.word_label = tk.Label(self.master, font=('Arial', 20))
        self.word_label.pack(expand=True)
        self.move_window()
​
        # 读取 Excel 数据
        self.load_excel_data()
​
    def move_window(self):
        x = random.randint(0, self.master.winfo_screenwidth() - self.master.winfo_width())
        y = random.randint(0, self.master.winfo_screenheight() - self.master.winfo_height())
        self.master.geometry(f'+{x}+{y}')
        self.master.after(3000, self.move_window)  # 每隔3秒更新一次位置
​
    def load_excel_data(self):
        self.df = pd.read_excel("大学英语四级词汇完整版带音标-顺序版.xlsx")
        self.word_column = self.df.columns[0]  # 第一列是单词列
        self.meaning_column = self.df.columns[1]  # 第二列是释义列
        # 创建一个字典,将单词和释义对应关系存储起来
        self.word_meaning_dict = dict(zip(self.df[self.word_column], self.df[self.meaning_column]))
        # 将字典的键转换为列表
        self.words_list = list(self.word_meaning_dict.keys())
​
    def update_word(self):
        # 随机选择一个单词
        random_word = random.choice(self.words_list)
        self.word_label.config(text=random_word)
        # 绑定鼠标悬停事件
        self.word_label.bind("<Enter>",
                             lambda event, word=random_word: self.show_meaning(event, word))
        self.word_label.bind("<Leave>", lambda event: self.hide_meaning(random_word))  # 绑定鼠标移出事件
        self.master.after(3000, self.update_word)  # 每隔3秒更新一次单词
​
    def show_meaning(self, event, word):
        meaning = self.word_meaning_dict.get(word, "Meaning not found")
        self.word_label.config(text=f"{meaning}", font=('Arial', 10), wraplength=150)
​
    def hide_meaning(self, random_word):
        self.word_label.config(text=random_word, font=('Arial', 20), wraplength=150)  # 清空文本
​
def main():
    root = tk.Tk()
    root.attributes('-toolwindow', True)  # 隐藏任务栏图标
    root.attributes('-alpha', 0.7)  # 设置透明度
    root.geometry('200x50+150+150')  # 初始位置和大小
    app = FloatingWordWindow(root)
    app.update_word()
    root.mainloop()
​
if __name__ == '__main__':
    main()

优化三 直接显示

import tkinter as tk
import random
import pandas as pd
​
class FloatingWordWindow:
    def __init__(self, master):
        self.master = master
        self.master.overrideredirect(True)  # 隐藏标题栏和边框
        self.master.attributes('-topmost', True)  # 置顶窗口
        self.master.attributes('-alpha', 0.7)  # 设置透明度
        self.word_label = tk.Label(self.master, font=('Arial', 18))
        self.word_label.pack(expand=True, padx=0, pady=0)
        self.load_word_meanings()  # 加载单词和释义
        self.move_window()
​
    def load_word_meanings(self):
        df = pd.read_excel("大学英语四级词汇完整版带音标-顺序版.xlsx")
        self.word_meaning_dict = dict(zip(df[df.columns[0]], df[df.columns[1]]))  # 单词和释义对应的字典
​
    def move_window(self):
        x = random.randint(0, self.master.winfo_screenwidth() - self.master.winfo_width())
        y = random.randint(0, self.master.winfo_screenheight() - self.master.winfo_height())
        self.master.geometry(f'100x25+{x}+{y}')  # 初始窗口大小为200x50
        self.master.after(3000, self.move_window)  # 每隔3秒更新一次位置
​
    def update_word(self):
        random_word = random.choice(list(self.word_meaning_dict.keys()))  # 随机选择一个单词
        meaning = self.word_meaning_dict.get(random_word, "Meaning not found")
        # meaning = meaning.replace("\n", "--")
        str=random_word+"\n"+meaning;
        num_newlines = str.count("\n")
        self.word_label.config(text=random_word+"\n"+meaning,justify="left",padx=0, pady=0) 
        self.word_label.config(height=(num_newlines+1)*25)  # Set height based on number of newlines
        # 根据单词长度和字体大小调整窗口大小
        word_length = len(random_word+meaning)
        font_size = 18
        window_width = max(18, word_length * font_size)
        self.master.geometry(f'{window_width}x{(num_newlines+1)*25}')  # 调整窗口宽度
        # # 绑定鼠标悬停事件
        # self.master.bind("<Enter>",
        #                      lambda event, word=random_word: self.show_meaning(event, word))
        # self.master.bind("<Leave>", lambda event: self.hide_meaning(random_word))  # 绑定鼠标移出事件
        # # 绑定左键单击事件
        self.master.bind("<Button-1>", lambda event: self.update_word())
        self.master.after(3000, self.update_word)  # 每隔3秒更新一次单词
​
    def show_meaning(self, event, word):
        meaning = self.word_meaning_dict.get(word, "Meaning not found")
        meaning = meaning.replace("\n", "--")
        self.word_label.config(text=f"{meaning}", font=('Arial', 10),padx=0, pady=0)
        word_length = len(meaning)
        font_size = 20
        window_width = max(20, word_length * font_size)
        self.master.geometry(f'{window_width}x30')  # 调整窗口宽度
​
    def hide_meaning(self, word):
        self.word_label.config(text=word, font=('Arial', 20), wraplength=150,padx=0, pady=0)  # 清空文本
​
def main():
    root = tk.Tk()
    root.attributes('-toolwindow', True)  # 隐藏任务栏图标
    root.attributes('-alpha', 0.7)  # 设置透明度
    app = FloatingWordWindow(root)
    app.update_word()
    root.mainloop()
​
if __name__ == '__main__':
    main()
​

优化四

随机不重复

import tkinter as tk
import random
import pandas as pd
​
class FloatingWordWindow:
    def __init__(self, master):
        self.master = master
        self.master.overrideredirect(True)  # 隐藏标题栏和边框
        self.master.attributes('-topmost', True)  # 置顶窗口
        self.master.attributes('-alpha', 0.7)  # 设置透明度
        self.word_label = tk.Label(self.master, font=('Arial', 20))
        self.word_label.pack(expand=True, padx=0, pady=0)
        self.load_word_meanings()  # 加载单词和释义
        self.move_window()
​
    def load_word_meanings(self):
        df = pd.read_excel("大学英语四级词汇完整版带音标-顺序版.xlsx")
        self.word_meaning_dict = dict(zip(df[df.columns[0]], df[df.columns[1]]))  # 单词和释义对应的字典
        self.available_words = list(self.word_meaning_dict.keys())  # 可选择的单词列表
​
    def move_window(self):
        x = random.randint(0, self.master.winfo_screenwidth() - self.master.winfo_width())
        y = random.randint(0, self.master.winfo_screenheight() - self.master.winfo_height())
        self.master.geometry(f'100x30+{x}+{y}')  # 初始窗口大小为200x50
        self.master.after(3000, self.move_window)  # 每隔3秒更新一次位置
​
    def update_word(self):
        if not self.available_words:  # 如果可选择的单词列表为空,则重新加载
            self.available_words = list(self.word_meaning_dict.keys())
​
        random_word = random.choice(self.available_words)  # 从可选择的单词列表中随机选择一个单词
        self.available_words.remove(random_word)  # 从可选择的单词列表中删除已选择的单词
        self.word_label.config(text=random_word,padx=0, pady=0)
        # 根据单词长度和字体大小调整窗口大小
        word_length = len(random_word)
        font_size = 20
        window_width = max(20, word_length * font_size)
        self.master.geometry(f'{window_width}x30')  # 调整窗口宽度
        # 绑定鼠标悬停事件
        self.master.bind("<Enter>",
                             lambda event, word=random_word: self.show_meaning(event, word))
        self.master.bind("<Leave>", lambda event: self.hide_meaning(random_word))  # 绑定鼠标移出事件
        # # 绑定左键单击事件
        self.master.bind("<Button-1>", lambda event: self.update_word())
        self.master.after(3000, self.update_word)  # 每隔3秒更新一次单词
​
    def show_meaning(self, event, word):
        meaning = self.word_meaning_dict.get(word, "Meaning not found")
        meaning = meaning.replace("\n", "--")
        word_length = len(meaning)
        font_size = 11
        window_width = max(10, word_length * font_size)
        self.master.geometry(f'{window_width}x30')  # 调整窗口宽度
        self.word_label.config(text=f"{meaning}", font=('Arial', 10), justify="left", wraplength=999, padx=0, pady=0)
​
    def hide_meaning(self, word):
        self.word_label.config(text=word, font=('Arial', 20), wraplength=150,padx=0, pady=0)  # 清空文本
​
def main():
    root = tk.Tk()
    root.attributes('-toolwindow', True)  # 隐藏任务栏图标
    root.attributes('-alpha', 0.7)  # 设置透明度
    app = FloatingWordWindow(root)
    app.update_word()
    root.mainloop()
​
if __name__ == '__main__':
    main()
​

  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星尘库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值