web-dev-qa-db-ja.com

Pythonのtkinterとtkinter.ttkのウィジェットの違いは何ですか?

メインtkinterモジュールとそのサブモジュールttk in Python 3は、同一のウィジェットを含むように見えます(つまり、ButtonsCheckButtonsなど)。

そのため、ボタンを作成するときは、tkinter.Buttonウィジェットまたはtkinter.ttk.Button

それらの違いは何ですか?なぜあなたはどちらを選ぶのですか?

35
multigoodverse

tkinterのウィジェットは、非常に簡単に構成できます。境界線の幅、フォント、画像、色など、外観をほぼ完全に制御できます。

ttkウィジェットはスタイルを使用して外観を定義するため、非標準のボタンが必要な場合はもう少し作業が必要です。 ttkウィジェットも、少し文書化されていません。基礎となるテーマとレイアウトエンジン(packgridおよびplaceではなく、ウィジェット自体のレイアウト)を理解することは困難です。

一般的に、テーマウィジェットは、より「ネイティブ」に見えるアプリケーションを提供しますが、構成可能性が失われます。

私のアドバイスは、GUIをもう少しモダンに見せたい場合はttkウィジェットを使用し、もう少し設定が必要な場合はtkinterウィジェットを使用することです。同じアプリケーションで両方を使用できます。

49
Bryan Oakley

タイルウィジェットを使用するように既存のアプリケーションを変換する をご覧ください。

参照:

Tk Widget Styling Support

このドキュメントに記載されているとおり:

最近、Qt(KDEプロジェクトで使用)やGTK(GIMPグラフィックス編集ソフトウェアとGnomeプロジェクトで使用)などの他のオープンソースツールキットが、X-Window GUI開発用のMotifの強力かつ無料の代替手段として登場しました。 GNU/Linuxなどのオープンソースシステムの急速な成長は、両方のツールキットが開発者の広大なコミュニティを引き付けるのを助け、両コミュニティ間の強固な(そして時には友好的な)競争が新機能の爆発をもたらしました。自由とカスタマイズ性への渇望がテーマ化の必要性を生み出しました。

Tkの現在の実装は、サポートされているプラ​​ットフォーム(Windows、X-Window、MacOS)でのみネイティブのルックアンドフィールを提供します。これは、特にテーマのサポートが「クールな」または必須の機能であると考えられるLinux開発者の間で、Tkのマインドシェアリングの喪失を部分的に説明しています。

昨日の多くのGUIの目標はクロスプラットフォームの視覚的均一性でした(QtとGTKは、NeXTSTEPから以前に借用したWindowsから視覚的外観の多くを借用しました)が、現在のデスクトップ上で、同様のシステム上でも大きな視覚的な違いを見つけることは非常に一般的です。スクリーンショットコンテストは、最近非常に一般的です。

...

多くのTkユーザーは、テーマのサポートを表面的なものとして、またはメガウィジェットやオブジェクト化などの必要な機能よりも重要度が低いと見なす場合があります。それでも、これはTkの長期的な実行可能性のために実装される重要な機能です。現在、多くのコースがMotifの代わりにQt、GTK、または(aarggg!)Swingを推進しており、Tkの余地はありません。その品質(クロスプラットフォーム、パフォーマンス、使いやすさ、国際化、Unicodeサポート)がどうであれ、テーマ化の欠如は常にTkを使用しない主な理由の1つと見なされます。 GTKの代わりにTkを使用するアプリケーションは、8.0より前のアプリケーションがX以外のデスクトップ上にあったため、pixmapをテーマにしたLinuxデスクトップ上、またはより新しいMacOSおよびWindowsバージョン上でも「外部」に見えます。

Tkinterではなく、ttkの一部であるウィジェット(合計6個)があります。上記のように、fgやbgなどのいくつかの構成アイテムがありませんが、これはスタイルで行うことができます(tk 8.5で導入)。

Tkinter.ttkをオーバーロードしてtkinter.ttkで両方を併用すると、両方の長所が得られます。

私が頻繁に使用するノートブック(タブ付きウィンドウ)のように、ttkのいくつかの追加ウィジェットは非常に便利です(tkinterにはない6つのウィジェットがあります)。

Larz60p

2
Larz60p

初心者にとっての私の意見は、Tkinterを学ぶことです。なぜなら、それは本当に簡単に学ぶことができるからです。 Bu on the hand Tkinter.ttkTkinterウィジェットを本当に完璧にするために設計されたモジュールですが、本当に難しく、そこには簡単なオプションはありません。 -fg-bgがないように。おそらく、Tkinterで使用できない新しいスタイルがあります。 ttk専用に設計されており、ttkにあります。

Tkinterウィジェットは、他のネイティブプラットフォームウィジェットのようには見えません。

しかし、ttkはより見栄えが良く、ニースであり、他のネイティブプラットフォームと同様です。

したがって、アプリを自分用にプライベートにする場合は、Tkinterを使用し、必要に応じてttkを使用します。これは、ttkが、アプリ。

アプリを公開用に作成する場合は、ウィンドウやその他の重要なものを作成するためにTkinterが必要になるため、両方に進みます。ウィジェットの場合はttkに進みます。

しかし、正直に言って、両方を使用すると言います。なぜなら、これら2つの間に戦いはないからです。

ttkは正直なところ挑戦です! GridPackPlaceなど、さらに重要なものがないためです。ちょっと待って!! Tkinterにあります!両方を使用してください!素敵なアプリを作ってみてください!

両者の本当の違いは、Tkinterウィジェットは選択としてより構成可能であり、ttkはより現代的であり、本当に便利なショートカットであるスタイルで構成可能であるということです。 Tkinterはウィンドウのコアのようなものであり、ttkはスタイリングです。のように考える:

Tkinter --- HTML、ttk --- CSS、Python --- JavaScript。

この答えで解決策があればいいのに!

1
Jaidee