2015-11-18 15 views
6

TkinterでGUIを作り始めました。そして、のtkMessageBoxも追加しました。しかし、最近私はモジュールttkをインポートすると、より最新の結果が得られることを発見しました。現在のOSの実際のスタイルでボタンとテキストボックスが表示されます。これは次のとおりです.Windows 10のボタンはプレーンで、青色で点灯し、以前のバージョンのグレーの灰色のボタンではありません。Python:Tkinter/ttkテーマのメッセージボックス

しかし残念ながら、私は、コモンダイアログボックスでこのTTKをテーマにしたウィジェット(私はtkMessageBoxから輸入したもの)を使用する方法を見つけることができません。だから、OK/Cancelダイアログは、Windows 10に属さないテーマで表示されます。

私がチェックしたすべての文書はTkinterに送られます。

+0

'ttk'はすべてのウィジェットを含むわけではなく、多くのウィジェットにはオプションがありません。 – TigerhawkT3

+0

モジュール 'ttk'の要素のみをテーマにすることができます。 'ttk' =' themed tk' – furas

+0

'ttk'がWindows 10のレイアウトを表示しますが、' Tkinter' noを表示する理由はTkinterがWindows 10にアップデートされていないためですか? – Xesa

答えて

5

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

ここでレポートをチェックするために、私はTcl/Tk 8.6、Python 3.4、Powershellを起動し、それぞれにメッセージボックスを表示させました。ご覧のとおり、Tcl/Tkは期待通りに見えますが、PythonとPowershellの両方が古いスタイルの非テーマのルックアンドフィールにデフォルト設定しています。

Tk messageboxes on Windows 10

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

たぶんこのマニフェストは動作していないようでした実行ファイルとしてではなく、このテストでは、同じフォルダ内のXMLファイルとして提供することができます。実行可能なリソースに実際にマニフェストを埋め込まなければなりませんでした。

マニフェストリソースの詳細については、"Enabling Visual Styles"を参照してください。 docsから

+0

お返事ありがとうございます、これは本当にすべてを説明します。その出発点からもう少し詳しく研究しますが、Visual Studioのこれらのファイルを調整するとUnixシステムとの互換性がなくなる恐れがあります。 – Xesa

+0

Pythonのexeファイルとマニフェストファイルは、unixとは関係ありません。これは、共通コントロールライブラリのテーマビジュアルスタイルAPIを有効にできることをウィンドウに知らせるプログラムのメモです。 – patthoyts

+0

答えの読者が、CPythonトラッカーの 'https:// bugs.python.org/issue27309'に問題をオープンしました。私は主なtkinterの管理者ではありませんが、それをアップグレードして、組み込みダイアログボックスのテーマバージョンを利用できるようにしたいと考えています。もっと情報を追加したい場合や、コントリビュータ契約に署名し、少なくともWindows用のパッチを提供したい場合は、無料でご利用ください。 –

0

:Tkを8.5から

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

  • ttkモジュールでは、アプリケーションを一般的な方法で書くことができますが、アプリケーションはWindows環境下のMacOSアプリケーション(MacOSの下のMacOSアプリケーションなど)と同じように見えます。

  • それぞれの可能な異なる外観は、名前付きttkテーマで表されます。たとえば、古典的なテーマは、前のセクションで説明した元のTkinterウィジェットの外観を示しています。

ttkは、何かを表すシステムスタイルを使用します。 Tkinterはありません。それは独自のスタイルです。

+0

これは、ボタンや編集フィールドのようなTkウィジェットに影響しますが、メッセージボックスとファイルを開いたままのファイル保存ダイアログは、Windowsのシステム実装によって常に提供されています。 UnixではTk独自のバージョンを作成する必要があります。MacOSX Tkでは、可能であれば、システム標準のダイアログが呼び出されます。 – patthoyts

3

ダイアログボックスを適切にテーマにした方が簡単な方法は、pyinstallerを使ってpythonスクリプトを.exeファイルにコンパイルすることです。 Pythonスクリプトとして実行されている(... py2exeもうまくいくかもしれないが、私はしばらくそのモジュールを使用していないと私はしていない場合は帰る予定がない)

エラーメッセージ:

.exeファイルとして実行されている

error message - script

エラーメッセージ:

error message - .exe

私はttk.Style().theme_use('clam')と異なるテーマを強制しようとしたが、しかし、ダイアログボックスがconfoしていないようですそれらのテーマにrm。ユーザーのシステムのスタイルをデフォルトにする必要があります。 Windows 98の感じよりも優れています!記録のために、私はPython 2.7でWindows 7を実行しているコンピュータでテストしました。

EDIT

それはあなたがpyInstallerの中--manifestオプションを使用して、マニフェストファイルを追加することができます表示されます、しかし、それはpyinstallerはあなたのためにそれを行うようですので、これはとにかく非常に適用されないことが表示されます。

ユーザに入力を促すダイアログボックスが必要な場合は、ttkSimpleDialoglink)と呼ばれるtkSimpleDialogのttkテーマバージョンの使用を検討してください。完全な開示:オリジナルのtkSimpleDialogモジュールに変更を加えました。

関連する問題