3

我在 mac 上遇到了 tkinter.ttk 的问题。我正在使用 macports 和 python3.1。当我尝试使用 tkinter.ttk 时,我得到了非常古老的 gui 元素。

例如:我得到这个
在此处输入图像描述
而不是这个:
在此处输入图像描述

我使用的代码是:

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

我很乐意从我的计算机中提供回答这个问题所需的任何信息。由于我是新手程序员,请告诉我在哪里可以找到上述信息。

我有一台安装了 Snow Leopard 的 Macbook 5,2。任何帮助,将不胜感激。
谢谢,马伦

问题更新:
我按照schlenk 的建议安装了tk @8.5.9_0+quartz ,只是为了得到这个错误:

TclMacOSXNotifierAddRunLoopMode: Tcl not built with CoreFoundation support Abort trap

我使用来自https://trac.macports.org/ticket/22954的补丁修复了这个错误。我按照信中的说明进行操作(它们是):

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

这产生了一个新错误,即:

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.
4

3 回答 3

3

问题可能是macports。您可以使用三个版本的 Tk 作为 ttk 的基础。屏幕截图看起来很像旧的 X11 Tk,而不是基于 aqua 的 Tk。1. 通过 X11 进行 Tk。2. 使用 Carbon 'windowingsystem -aqua' 编译的 Tk 3. 使用 Cocoa 编译的 Tk

因此,您应该尝试通过 macports 构建一个 Tk 变体“quartz”,或者您应该获得一些已经构建了正确版本的预构建版本(例如 ActiveStates)。

所以试试:

sudo port build tk @8.5.9+quartz

看看这里的教程以获得更多指导: http ://www.tkdocs.com/tutorial/install.html#installmac

于 2011-02-25T22:37:32.967 回答
2

尝试

style = ttk.Style()
print(style.theme_names())
style.theme_use('default') # change 'default' to something better
于 2012-05-03T01:19:01.533 回答
-1

我没有玩过 ttk,但是我对 tkinter 有相当多的经验。我相信你必须填写 style 关键字参数。

我认为它看起来像这样。

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

于 2011-02-23T08:26:36.760 回答