tkinter 真 · 重 做 標(biāo) 題 欄(自 定 義 標(biāo) 題 欄)(特 別 干 貨 1200字 ?。。。?/h1>

????????????????????????????????????????????自定義標(biāo)題欄
警告:這篇文章馬上會(huì)被重置成另一篇文章,更多說(shuō)明請(qǐng)看github:
https://github.com/littlewhitecloud/CustomTkinterTitlebar/ (別忘了給項(xiàng)目一顆star~)
證明不是普通的窗口:

看到這里,你可能好奇這是怎么一回事了吧,那就是 —— “我把標(biāo)題欄給重做了”

整個(gè)事情的大概:
幾百年前 ,一個(gè)月前,我就看到有許多自定義標(biāo)題欄的樣例,我很羨慕,比如:


以及很多這樣的例子,哦對(duì)了,還有UWP:

我就在想,tkinter能不能做到呢,于是,在我一個(gè)月以前就開(kāi)始挖坑了……
直到這一個(gè)月,我才開(kāi)始去填這個(gè)坑,因?yàn)榻K于到了周末嘛,我把作業(yè)在周五晚上都刷完了,并且也沒(méi)什么事情,閑來(lái)無(wú)事,找到了遺棄下來(lái)的這個(gè)坑,于是就開(kāi)始填了……
想法:
先overrideredirect窗口,使窗口失去標(biāo)題欄&邊框以及后面很麻煩的任務(wù)欄上的圖標(biāo)。
然后創(chuàng)建一個(gè)Frame, 設(shè)置圖標(biāo),文本,最大化,最小化,關(guān)閉按鈕~
最后在隨便完善一下,就好了。
理論好像存在,實(shí)踐有很多問(wèn)題。
細(xì)節(jié):
把鼠標(biāo)放在三個(gè)按鈕之上的時(shí)候或顯示50%透明的按鈕
雙擊標(biāo)題欄會(huì) 最大化 / 最小化
右鍵圖標(biāo)會(huì)有功能菜單
增加Acrylic Blur
可拖動(dòng)標(biāo)題欄移動(dòng)窗口
可以放置任何組件(Menu?未曾嘗試)在標(biāo)題欄內(nèi)
開(kāi)發(fā)時(shí)遇到的問(wèn)題:
1.如何最小化
????直接最小化會(huì)出問(wèn)題:

奇葩的解決辦法:
先取消overrideredirect,在最小化就好了:
2.最小化后再打開(kāi)
會(huì)出現(xiàn)這樣的情況:

解決方案:
先檢查state?是不是"iconic", 如果是,并且o_flag是假的時(shí)候
執(zhí)行overrideredirect
o_flag(overrideredirect_flag): 窗口是否被overrideredirect
3.如何移動(dòng):
4.最大化
直接“暴力”點(diǎn):
但是,待會(huì)講吧……
好像也就這么點(diǎn)吧, 先展示原碼:
現(xiàn)存的BUG:
#1 這個(gè)版本只能使用黑暗模式,還沒(méi)做光亮模式
#2 雙擊標(biāo)題欄最大化后,最大化圖標(biāo)會(huì)出現(xiàn)問(wèn)題
#3 全屏?xí)叭痢?/span>
#4 當(dāng)有菜單的時(shí)候,菜單會(huì)在標(biāo)題欄上方(推測(cè),目前還沒(méi)有試過(guò))
未來(lái)實(shí)現(xiàn):
更好的標(biāo)題欄(更多細(xì)節(jié)化):
當(dāng)右擊圖標(biāo)的時(shí)候顯示菜單,如:

增加邊框,已實(shí)現(xiàn),但是會(huì)產(chǎn)生大量黑框
修改:
2022/12/17 15:35:59
#1

#2 & #3 解決? +?新產(chǎn)生的?#5 無(wú)法正確全屏?+ 新增窗口focus in(聚焦) 和 focus on(未聚焦) 時(shí)的標(biāo)題欄顏色 + 自動(dòng)調(diào)節(jié)主題(darkdetect)?+ 窗口acrylic模糊(可選,自己修改)+
優(yōu)化:節(jié)約self.color[key]調(diào)用次數(shù)和os.getcwd()調(diào)用次數(shù)? +?右鍵窗口圖標(biāo)菜單
2022/12/19 17:57:11
小細(xì)節(jié)微調(diào):
titlebar.pack取消了pady = 1, padx = 1(強(qiáng)迫癥福音)
titleicon.pack由padx = 7, pady = 7, 改為padx = 6, pady = 6盡量和Windows原生標(biāo)題欄一樣大
color["light"] & color["light_nf"] 被改為淡白色#f2efef,而不是淡青色#ececee
代碼
Github上的演示視頻(巨卡):
https://user-images.githubusercontent.com/71159641/208288057-d02429cb-6fd3-4524-b509-bbb89b4889ab.mp4?





#6 淺色時(shí)最大化最小化和關(guān)閉的圖標(biāo)
更多信息
目錄:

我會(huì)托管到github上面然后就可以下下來(lái)使用了,github地址:
https://github.com/littlewhitecloud/CustomTkinterTitlebar/
