♻️

pythonのGUIライブラリを介さずウィンドウタイトルバーの色を変える方法 in Win11

2023/12/22に公開

記事の要約

pythonにおいて、GUIのウィンドウタイトルバーの色を変更したい場合、タイトルバーを一旦非表示にしてそれぞれのボタンを1から実装する手法がよく出てくる。
これはウィンドウの移動などもコーディングしなければならず、色を変えたいだけなのに面倒。
DwmSetWindowAttribute 関数を使えばWindows11なら対処できるよ

あらすじ

  1. windows11のpythonでタイトルバーの色だけ変えたい
  2. はじめはroot.overrideredirect(1)で実装していたが、不安定な挙動が多い
  3. DwmSetWindowAttributeで解決

サンプルコード

if __name__ == "__main__":
	app = App()
	
	# ウィンドウのハンドルを取得
	hwnd = windll.user32.GetParent(app.winfo_id())
	
	# キャプションの色を指定
	DWMWA_CAPTION_COLOR = 35
	
	# 0x00bbggrrの16進数で色を指定
	COLOR = 0x00f0f0ff
	
	# ウィンドウに適用
	windll.dwmapi.DwmSetWindowAttribute(hwnd, DWMWA_CAPTION_COLOR, byref(c_int(COLOR)), sizeof(c_int))
	
	app.mainloop()

他にも、タイトルバーの文字色・ウィンドウのコーナーの丸み・境界線色 等も変更できます。
詳しくは参考ページを参照してください。

参考ページ

https://learn.microsoft.com/ja-jp/windows/win32/api/dwmapi/nf-dwmapi-dwmsetwindowattribute
https://learn.microsoft.com/ja-jp/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute

Discussion