質問: 現在Tkinterの勉強をしております。CGソフトやAdobe Illustratorなどのクリエイティブソフトを見てみると、独自のタイトルバーデザインがされているのをよく見かけます。例えば、タイトルバーの色を変えたり、タイトルバーの太さを変えたり、"最小化・最大化・閉じる" の他にモード切替のボタンを配置したり...etc もしタイトルバー周りの調整が可能でしたら、その方法やリファレンス記事などを教えていただけないでしょうか。よろしくお願いします。
回答: Tkinterでは、タイトルバーに関する調整はサポートされてません。 プラットフォーム依存の領域です。 もし自身で実装するとすれば、主に2通りのアプローチがあります * 各プラットフォーム固有の拡張方法 * タイトルバーを非表示にする方法 > > もしタイトルバー周りの調整が可能でしたら、その方法やリファレンス記事などを教えていただけないでしょうか。よろしくお願いします。 > > > `root.overrideredirect(1)` で、タイトルバーを非表示にして 自分で自由に実装する方法をよく見かけますが、 プラットフォーム依存で異なる振る舞いが報告されていて、 お勧めできる方法はありません。 副作用として「ウィンドウの移動」「ウィンドウのリサイズ」も出来なくなってしまう為、 これらの機能を自分で実装する必要も出てきます。 タイトルバーを非表示にするアプローチのサンプルでは、 この点のフォローがないことが多いので注意。 (wxPython や PyQt では、ウィンドウのフラグ指定で一部対応できることもあります) どうしても tkinter で実装したい場合は、 C拡張や ctypes 等を用いて実装することになりますが、難易度は高めです。 例えば、windowsであれば「**non-client area**」辺り、 プラットフォームのネイティブな実装方法を調べ、Pythonから呼び出す事になります。 タイトルバーを非表示にするだけなら、多少は簡単に実装できます。 以下は windows で、標準のタイトルバーを非表示にしたデモ。 !イメージ説明 実装方法、概要のみですが、 * (Windowsの場合) wm_frame() メソッドで、対象のウィンドウ・ハンドルを得られます。(16進数文字列なので数値に変換) * SetWindowLong でタイトルバーを表示するフラグをoffにする。 (windows API の `GWL_STYLE`, `WS_DLGFRAME` 辺りを調べる) * ウィンドウの移動は自分で再実装 これは、windowsの場合なので、プラットフォーム毎にやり方を調べる必要があります。 クロスプラットフォームな実装では、 Electron や GTK3 がタイトルバーの非表示やカスタマイズに対応してます。 https://en.wikipedia.org/wiki/Client-side_decoration