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.pswp.cn/web/23372.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23372.shtml
英文地址,請注明出處:http://en.pswp.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下…