做网站用什么前端框架,软件开发怎么自学,公司网站制作门槛,用什么做网站后台python实现一个浮动窗口随机显示四级单词在桌面跑来跑去
实现一个浮动窗体随机显示四级单词在windows桌面置顶移动
tkinter库来创建窗口和显示单词#xff0c;以及random库来随机选择单词。 使用after方法来定时更新窗口的位置#xff0c;实现单词窗口的慢慢移动效果
使用…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 masterself.master.overrideredirect(True) # 隐藏标题栏和边框self.master.attributes(-topmost, True) # 置顶窗口self.master.attributes(-alpha, 0.7) # 设置透明度self.master.geometry(200x50100100) # 初始位置和大小self.word_label tk.Label(self.master, font(Arial, 20))self.word_label.pack(expandTrue)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] # 替换为你的四级单词列表dfpd.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(textrandom_word)# 绑定鼠标悬停事件self.word_label.bind(Enter,lambda event, wordrandom_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(textf{meaning},font(Arial, 10),wraplength150)
def hide_meaning(self,random_word):self.word_label.config(textrandom_word,font(Arial, 20),wraplength150) # 清空文本
def main():root tk.Tk()root.attributes(-toolwindow, True) # 隐藏任务栏图标root.attributes(-alpha, 0.7) # 设置透明度root.geometry(200x50150150) # 初始位置和大小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 masterself.master.overrideredirect(True) # 隐藏标题栏和边框self.master.attributes(-topmost, True) # 置顶窗口self.master.attributes(-alpha, 0.7) # 设置透明度self.master.geometry(200x50100100) # 初始位置和大小self.word_label tk.Label(self.master, font(Arial, 20))self.word_label.pack(expandTrue)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(textrandom_word)# 绑定鼠标悬停事件self.word_label.bind(Enter,lambda event, wordrandom_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(textf{meaning}, font(Arial, 10), wraplength150)
def hide_meaning(self, word):self.word_label.config(textword, font(Arial, 20), wraplength150) # 清空文本
def main():root tk.Tk()root.attributes(-toolwindow, True) # 隐藏任务栏图标root.attributes(-alpha, 0.7) # 设置透明度root.geometry(200x50150150) # 初始位置和大小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 masterself.master.overrideredirect(True) # 隐藏标题栏和边框self.master.attributes(-topmost, True) # 置顶窗口self.master.attributes(-alpha, 0.7) # 设置透明度self.master.geometry(200x50100100) # 初始位置和大小self.word_label tk.Label(self.master, font(Arial, 20))self.word_label.pack(expandTrue)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(textrandom_word)# 绑定鼠标悬停事件self.word_label.bind(Enter,lambda event, wordrandom_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(textf{meaning}, font(Arial, 10), wraplength150)
def hide_meaning(self, random_word):self.word_label.config(textrandom_word, font(Arial, 20), wraplength150) # 清空文本
def main():root tk.Tk()root.attributes(-toolwindow, True) # 隐藏任务栏图标root.attributes(-alpha, 0.7) # 设置透明度root.geometry(200x50150150) # 初始位置和大小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 masterself.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(expandTrue, padx0, pady0)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(f100x25{x}{y}) # 初始窗口大小为200x50self.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, --)strrandom_word\nmeaning;num_newlines str.count(\n)self.word_label.config(textrandom_word\nmeaning,justifyleft,padx0, pady0) self.word_label.config(height(num_newlines1)*25) # Set height based on number of newlines# 根据单词长度和字体大小调整窗口大小word_length len(random_wordmeaning)font_size 18window_width max(18, word_length * font_size)self.master.geometry(f{window_width}x{(num_newlines1)*25}) # 调整窗口宽度# # 绑定鼠标悬停事件# self.master.bind(Enter,# lambda event, wordrandom_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(textf{meaning}, font(Arial, 10),padx0, pady0)word_length len(meaning)font_size 20window_width max(20, word_length * font_size)self.master.geometry(f{window_width}x30) # 调整窗口宽度
def hide_meaning(self, word):self.word_label.config(textword, font(Arial, 20), wraplength150,padx0, pady0) # 清空文本
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 masterself.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(expandTrue, padx0, pady0)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(f100x30{x}{y}) # 初始窗口大小为200x50self.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(textrandom_word,padx0, pady0)# 根据单词长度和字体大小调整窗口大小word_length len(random_word)font_size 20window_width max(20, word_length * font_size)self.master.geometry(f{window_width}x30) # 调整窗口宽度# 绑定鼠标悬停事件self.master.bind(Enter,lambda event, wordrandom_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 11window_width max(10, word_length * font_size)self.master.geometry(f{window_width}x30) # 调整窗口宽度self.word_label.config(textf{meaning}, font(Arial, 10), justifyleft, wraplength999, padx0, pady0)
def hide_meaning(self, word):self.word_label.config(textword, font(Arial, 20), wraplength150,padx0, pady0) # 清空文本
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()