python随机显示四级词汇 修改版直接显示释义

 python随机显示四级词汇 修改版直接显示释义 添加暂停 和继续(按下中建滚轮触发) 按下右键 退出程序 解决在暂停后 ,重新调用update_word 会明显发现每隔5秒更新一次单词的速率已经改变

速率改变的问题可能是由于暂停期间没有清除之前的定时器所导致的。为了确保重新调用update_word时速率正常,你可以在恢复更新时先取消之前的定时器,然后重新设置定时器。这样可以确保每次调用update_word时都是从头开始计时。

import tkinter as tk
import random
import pandas as pd
tim1=2000 #定义窗体随机跳动的时间 单位时间毫秒
tim2=4000 #定义单词更改的时间 单位时间毫秒
class FloatingWordWindow:def __init__(self, master):self.master = masterself.paused = False  # 初始状态为未暂停self.master.overrideredirect(True)  # 隐藏标题栏和边框self.master.attributes('-topmost', True)  # 置顶窗口self.master.attributes('-alpha', 0.8)  # 设置透明度self.word_label = tk.Label(self.master, font=('Arial', 12), padx=0, pady=0)self.word_label.pack(expand=True, padx=0, pady=0)self._update_word_timer = None  # 用于存储定时器的IDself.load_word_meanings()  # 加载单词和释义self.move_window()self.create_controls()  # 创建控制按钮self.master.bind("<Button-3>", lambda event: self.master.destroy())self.master.bind("<Button-2>", lambda event: self.toggle_pause())self.master.bind("<Button-1>", self.start_move)self.master.bind("<B1-Motion>", self.on_move)self.master.bind("<ButtonRelease-1>", self.end_move)def start_move(self, event):self._offsetx = event.xself._offsety = event.ydef on_move(self, event):x = self.master.winfo_pointerx() - self._offsetxy = self.master.winfo_pointery() - self._offsetyself.master.geometry(f'+{x}+{y}')def end_move(self, event):self._offsetx = Noneself._offsety = Nonedef 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):if self.paused:returnx = 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.update_word()  # 更新单词# 获取当前单词的长度并根据需要调整窗口的宽度current_word = self.word_label.cget("text")word_length = len(current_word)font_size = 11window_width = max(100, word_length * font_size)  # 最小宽度设为100self.master.geometry(f'{window_width}x50')  # 调整窗口宽度self.master.after(tim1, self.move_window)  # 每隔5秒更新一次位置def update_word(self):if self.paused:returnif 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)  # 从可选择的单词列表中删除已选择的单词meaning = self.word_meaning_dict.get(random_word, "Meaning not found")meaning = meaning.replace("\n", "-")self.word_label.config(text=f"{random_word}\n{meaning}",padx=0, pady=0)# 根据单词长度和字体大小调整窗口大小word_length = len(random_word+meaning)font_size = 11window_width = max(10, word_length * font_size)self.master.geometry(f'{window_width}x50')  # 调整窗口宽度# self.master.after(5000, self.update_word)  # 每隔3秒更新一次单词self._update_word_timer = self.master.after(tim2, self.update_word)def toggle_pause(self, event=None):self.paused = not self.pausedif self.paused:self.control_button.config(text=">>>-->")self.control_button.pack()  # 显示按钮else:if self._update_word_timer is not None:  # 取消之前的定时器self.master.after_cancel(self._update_word_timer)self.update_word()self.control_button.config(text="暂停")self.control_button.pack_forget()  # 隐藏按钮def create_controls(self):self.control_button = tk.Button(self.master, text="暂停", command=self.toggle_pause)self.control_button.pack()self.control_button.pack_forget()
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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/23372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux高级进阶-ssh配置

Ubuntu-system 允许使用root远程登陆 apt install ssh -y在/etc/ssh/sshd_config 文件修改PermitRootLogin yes systemctl restart ssh远程连接软件用户名为root

Ubuntu系统中Apache Web服务器的配置与实战

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

Educational Codeforces Round 166(Div.2) A~D

A.Verify Password&#xff08;字符串&#xff09; 题意&#xff1a; Monocarp正在开发他的新网站&#xff0c;目前面临的挑战是如何让用户选择强密码。 Monocarp认为&#xff0c;强密码应满足以下条件&#xff1a; 密码只能由小写拉丁字母和数字组成&#xff1b;字母后面不…

PasteCode系列系统说明

定义 PasteCode系列是指项目是基于PasteTemplate构建的五层以上项目&#xff0c;包括不仅限于 Domain EntityFrameworkCore Application.Contracts Application HttpApi.Host 熟悉ABP vNext就很好理解了&#xff0c;因为PasteTemplate就是基于ABP的框架精简而来&#xff01;在…

一些Mysql面试题

InnoDB是如何存储数据的&#xff1f; InnoDB 的数据是按「数据页」为单位来读写的&#xff0c;默认数据页大小为 16 KB。每个数据页之间通过双向链表的形式组织起来&#xff0c;物理上不连续&#xff0c;但是逻辑上连续。 数据页内包含用户记录&#xff0c;每个记录之间用单向…

【java 如何将字符串反转?】

文章目录 概要示例&#xff08;1&#xff09;使用StringBuilder的reverse方法&#xff08;2&#xff09;使用charAt和循环&#xff08;3&#xff09;使用双指针&#xff08;4&#xff09;使用递归 总结 概要 在Java中&#xff0c;有多种方法可以将字符串反转&#xff0c;我这里…

代码随想录训练营第二天 977有序数组的平方 209长度最小的子数组 59螺旋矩阵II

第一题&#xff1a; 题目链接&#xff1a;977. 有序数组的平方 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 先将数组求完平方和后进行排序&#xff0c;很简单&#xff0c;主要是排序算法的考察。 这里采用快排 快排的思路&#xff1a; 取这个数组的中间值…

代码随想录算法训练营第四十六 | ● 139.单词拆分 ● 关于多重背包,你该了解这些! ● 背包问题总结篇!

139.单词拆分 视频讲解&#xff1a;https://www.bilibili.com/video/BV1pd4y147Rh https://programmercarl.com/0139.%E5%8D%95%E8%AF%8D%E6%8B%86%E5%88%86.html class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<st…

java stream流之groupby的用法

简单分组 按照年龄对 Person 对象进行分组&#xff1a; 代码示例 import java.util.*; import java.util.stream.Collectors;public class SimpleGrouping {public static void main(String[] args) {List<Person> people Arrays.asList(new Person("Alice"…

上市即交付,比亚迪秦L DM-i万人交车暨千媒众测开营

6月6日&#xff0c;“引领中级 开创油耗2时代”秦L DM-i万人交车暨千媒众测开营仪式在比亚迪大本营深圳盛大举行。 众多车主代表亲临现场&#xff0c;与全国各地的比亚迪4S店千店联动&#xff0c;将秦L DM-i全国交付推向新的高潮。发布即量产&#xff0c;上市即交付&#xff0…

ESP32:FreeRTOS节拍配置(vTaskDelay延时10ms改为1ms)

文章目录 背景方法手动修改sdkconfig通过idf.py menuconfig 背景 在FreeRTOS的默认配置中&#xff0c;任务调度的频率默认是100HZ&#xff0c;因此默认vTaskDelay默认延时是10ms。 FreeRTOS 的系统时钟节拍可以在配置文件 FreeRTOSConfig.h 里面设置&#xff1a;#define confi…

【HarmonyOS】鸿蒙应用子模块module资源如何获取

【HarmonyOS】鸿蒙应用子模块module资源如何获取 一、问题背景&#xff1a; 在多模块项目工程中&#xff0c;单个模块的资源不会放在主模块中&#xff0c;所以我们需要在子模块中访问自己的资源。如果使用默认的资源获取api&#xff0c;会提示找不到资源。 那如何获取子模块下…

【AI基础】第四步:保姆喂饭级-langchain+chatglm2-6b+m3e-base

在第三步手动安装chatglm2-6b时&#xff0c;已经可以通过web进行交互。langchain重新封装了一下AI框架&#xff0c;提供更加友好的开发功能&#xff0c;类似于AI届的spring框架。langchain的安装过程也类似于上一步说的&#xff1a;【AI基础】第三步&#xff1a;纯天然手动安装…

负载均衡

文章目录 负载均衡的分类负载均衡的算法 负载均衡的分类 对链路的负载均衡 对链路的负载均衡主要是指应用方有多条ISP网络出口,比方说电信网通,电信铁通等,对链路的负载均衡也是解决目前电信网通互联互通的最专业的技术.其实现的原理是根据负载均衡算法来算出,到目标地址的数据…

企业获客有哪些好的广告推广拓客渠道?

在这个数字化营销的时代&#xff0c;企业要想在激烈的市场竞争中脱颖而出&#xff0c;选择正确的广告宣传渠道至关重要。随着互联网技术的飞速发展&#xff0c;各类媒体平台如雨后春笋般涌现&#xff0c;为企业提供了广阔的宣传空间。云衔科技通过多元化的媒体渠道&#xff0c;…

485数据采集模块

在工业自动化与智能化的浪潮中&#xff0c;数据采集作为整个系统的基础和核心&#xff0c;其准确性和实时性直接关系到生产效率和产品质量。而485数据采集模块&#xff0c;作为连接现场设备与上位机的重要桥梁&#xff0c;其性能与稳定性对于整个系统的运行至关重要。HiWoo Box…

【AIGC X UML 落地】通过多智能体实现自然语言绘制UML图

前天写了篇博文讲到用PlantUML来绘制C类图和流程图。后台有读者留言&#xff0c;问这步能否自动化生成&#xff0c;不想学习 PlantUML 语法。 我想了下&#xff0c;发现这事可行&#xff0c;确实可以做到通过自然语言的描述就能实现 UML图的绘制&#xff0c;昨天晚上加了个班到…

B站播放数量如何实现,高并发读写计数难点

我们先不考虑用户规模、并发量、性能、可靠性… 这些东西 我们就单单从功能层面实现统计视频播放量&#xff0c;其实很简单&#xff0c; 就是给视频表加一个字段&#xff0c;用来表示播放量 这样实现&#xff0c;最大的好处就是简单&#xff0c;但是我们马上就能发现一个非常严…

Vue 组件之间的通信

在 Vue.js 中&#xff0c;组件是构建应用程序的基本单位。然而&#xff0c;当你的应用程序变得复杂时&#xff0c;组件之间的通信变得至关重要。本文将介绍几种 Vue 组件之间通信的方式&#xff0c;帮助你更好地管理和组织代码。 父子组件通信 父组件可以通过 props 向子组件传…

离线下载安装TTS的步骤

要离线下载安装 TTS 模块&#xff0c;需要先在有网络的环境下下载所有所需的依赖项&#xff0c;然后将这些文件转移到目标环境中进行安装。以下是具体步骤&#xff1a; 步骤 1&#xff1a;在有网络的环境下下载依赖项 创建一个目录来存放下载的包&#xff1a; mkdir TTS_deps下…