2011-02-22 11 views
3

Macのtkinter.ttkに問題があります。私はmacportsとpython3.1を使用しています。私がtkinter.ttkを使用しようとすると、私は非常に古いgui要素を見ています。ttkウィジェットを現代的に見えるようにするにはどうすればよいですか?

例えば:私は、これに代えて、この
enter image description here
取得:私が使用
enter image description here

コードは次のとおりです。

from tkinter import * 
from tkinter import ttk 
root = Tk() 
button = ttk.Button(root, text="Hello World").grid() 
root.mainloop() 

私が必要私のコンピュータからすべての情報を提供するために幸せになりますこの質問に答える。私が初心者のプログラマーであるので、この情報をどこに見つけるか教えてください。

私はSnow LeopardをインストールしたMacBook 5,2を持っています。どんな助けもありがとう。
おかげで、マーリン

質問のアップデート:私はパッチでこのエラーを修正

TclMacOSXNotifierAddRunLoopMode: Tcl not built with CoreFoundation support Abort trap 


私は8.5.9_0 +シュレンクはこのエラーを取得する唯一の提案として石英@TKをインストールhttps://trac.macports.org/ticket/22954から。しかし、私は経験のまともな量を持って、私はTTKでプレイしていない

Traceback (most recent call last): 
    File "hello.py", line 5, in <module> 
    root = Tk() 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/tkinter/__init__.py", line 1632, in __init__ 
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use) 
_tkinter.TclError: Can't find a usable tk.tcl in the following directories: 
    /opt/local/lib/tcl8.5/tk8.5 /opt/local/lib/tcl8.5/tk8.5/Resources/Scripts /opt/local/lib/tk8.5 /opt/local/lib/tk8.5/Resources/Scripts /opt/local/Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/lib/tk8.5 /opt/local/Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/lib/tk8.5/Resources/Scripts /opt/local/Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/lib/tk8.5 /opt/local/Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/library 

/opt/local/lib/tk8.5/tk.tcl: version conflict for package "Tk": have 8.5.7, need exactly 8.5.9 
version conflict for package "Tk": have 8.5.7, need exactly 8.5.9 
    while executing 
"package require -exact Tk 8.5.9" 
    (file "/opt/local/lib/tk8.5/tk.tcl" line 20) 
    invoked from within 
"source /opt/local/lib/tk8.5/tk.tcl" 
    ("uplevel" body line 1) 
    invoked from within 
"uplevel #0 [list source $file]" 


This probably means that tk wasn't installed properly. 
+0

を試してみてくださいこれを作業させてください。それはおそらく関連性がなくなるほど古くなっていますので、@ schlenkの回答としてマークするつもりです。答えはほとんどの作業を回答に入れます 質問。 –

答えて

3

問題はMacPortsのかもしれません。あなたのttkの基礎として使うことができるTkの3つのバージョンがあります。スクリーンショットはアクアベースのTkではなく古いX11 Tkのように見えます。 1. X11を介してTk。ココア

でコンパイルされたカーボンを使用してコンパイル 2. Tkの「windowingsystem -aqua」 3. TkのあなたがいることのいずれかにしようとMacPortsを介して、Tkの変種「水晶」を構築したり、あなたには、いくつかのビルド済みバージョン(例えばActiveStates)を取得する必要があります必要がありますすでに適切なバージョンが構築されています。

ので、試してみてください。

sudo port build tk @8.5.9+quartz 

は、いくつかのより多くの指導のために、ここでのチュートリアルを見てください: http://www.tkdocs.com/tutorial/install.html#installmac

+0

ありがとう、私はすぐにこれを試してみます。 –

+0

** tk @ 8.5.9_0 + quartz(アクティブ)** hello.py(私の質問のコード)を実行するとエラーが発生します。** TclMacOSXNotifierAddRunLoopMode:TclはCoreFoundationをサポートしていません。私がこれを解決すれば、私は解決策を投稿します。 –

+0

このエラーは、https://trac.macports.org/ticket/22954のパッチ適用手順に従って解決しました。もちろん、これは別のエラーを作成しました...エラーがかなり関わっているので私は私の質問を更新します。 –

-1

:これは新しいエラーを作成

$ cd /opt/local/var/macports/sources/rsync.macports.org/release/ports/lang/tcl 
$ sudo patch < ~/Downloads/tcl.2.patch 
$ sudo port install tcl 

:私は手紙への指示(彼らは)が続きますtkinterで。私はあなたがスタイルキーワードの引数を記入しなければならないと信じています。

私はそれがこのように見えると思います。

from tkinter import * 
from tkinter import ttk 
root = Tk() 
button = ttk.Button(root, text="Hello World", style="somestyle").grid() 
root.mainloop() 

いくつかの関連文書へのリンク: http://docs.python.org/release/3.1.3/library/tkinter.ttk.html

+0

私は正しく説明していないのではないかと恐れています。デフォルトは画像Bのように見えますが、代わりに画像Aのように見えます。なぜですか? –

2

は、私はもはやでも、私がしようとしていたコンピュータを持っていない

style = ttk.Style() 
print(style.theme_names()) 
style.theme_use('default') # change 'default' to something better