11

TkinterでGUI の作成を開始し、モジュールtkMessageBoxも追加しました。しかし最近、モジュールttkをインポートすると、より「最新」の結果が得られることがわかりました。ボタンとテキスト ボックスは、現在の OS の実際のスタイルで表示されます。これは、Windows 10 のボタンは無地で青く点灯しており、以前のバージョンの影付きの灰色のブロック状のボタンではありません。

しかし残念ながら、このttkをテーマにしたウィジェットを共通のダイアログ ボックス ( tkMessageBoxからインポートしたもの) で使用する方法が見つかりません。したがって、[OK/キャンセル] ダイアログ (たとえば) は、Windows 10 に属さないテーマで引き続き表示されます。

私がチェックするすべてのドキュメントは、私をTkinterに導きます。

4

3 に答える 3

9

Windows の Tk メッセージボックス、システム提供のメッセージボックスです。Tk は、Tk ボタンとフレームを使用してメッセージ ボックスを作成しませんが、Windows API によって提供されるストック ダイアログを表示します。

ここでレポートを確認するために、Tcl/Tk 8.6、Python 3.4、および Powershell を実行し、それぞれにメッセージ ボックスを表示させました。ご覧のとおり、Tcl/Tk は期待どおりに表示されますが、Python と Powershell の両方が、テーマのない古いスタイルのルック アンド フィールにデフォルト設定されています。

Windows 10 の Tk メッセージボックス

この理由は、これを起動する実行可能ファイルに埋め込まれたマニフェストに関係している可能性が最も高いです。Tcl/Tkwish実行可能ファイルには、アプリケーションがテーマ コモン コントロール ライブラリをサポートしていることを示すマニフェスト リソースが含まれています。python.exe および pythonw.exe ファイルには、そのようなリソースはありません。必要なマニフェストは、tkinter が使用する Tk86.dll ファイルに埋め込まれていますが、これを実行可能ファイルに関連付ける必要があると思います。Visual Studio で pythonw.exe ファイルを開き、既存の RT_MANIFEST リソースを Tk86.dll から抽出したリソースに置き換えることで、この仮説をテストしました。適切なマニフェストを配置すると、Python tkinter メッセージボックスが適切にテーマ化されて表示されます。 埋め込みマニフェストを使用する Python 3.4

おそらく、このマニフェストは、実行可能ファイルと同じフォルダー内の XML ファイルとして提供できますが、これをテストしたところ、うまくいかなかったようです。マニフェストを実際に実行可能リソースに埋め込む必要がありました。

マニフェスト リソースの詳細については、「ビジュアル スタイルの有効化」を参照してください。

于 2015-11-19T10:28:21.360 に答える
1

ドキュメントから:

Tk 8.5 から、ttk モジュールが利用可能になりました。このモジュールは、元の Tkinter 機構の多く (すべてではない) を置き換えます。このモジュールを使用すると、次の利点が得られます。
  • プラットフォーム固有の外観。Tk 8.5 より前のリリースでは、Tk アプリケーションに関する最も一般的な不満の 1 つは、さまざまなプラットフォームのスタイルに準拠していないというものでした。

  • ttk モジュールを使用すると、一般的な方法でアプリケーションを作成できますが、プログラムを変更することなく、Windows で Windows アプリケーションのように、MacOS で MacOS アプリのように、アプリケーションを作成できます。

  • それぞれの可能な異なる外観は、名前付きの ttk テーマによって表されます。たとえば、クラシック テーマは、前のセクションで説明したオリジナルの Tkinter ウィジェットの外観を提供します。

ttkシステム スタイルを使用して何かを表現します。Tkinterではない。独自のスタイルです

于 2015-11-19T10:31:37.317 に答える