Как мне сделать так, чтобы мои виджеты ttk выглядели современно? - PullRequest
3 голосов
/ 22 февраля 2011

У меня проблема с tkinter.ttk на Mac.Я использую macports и python3.1.Когда я пытаюсь использовать tkinter.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()

Я был бы рад предоставить любую информацию с моего компьютера, необходимую для ответа на этот вопрос.Поскольку я начинающий программист, скажите, пожалуйста, где найти указанную информацию.

У меня MacBook 5,2 с установленным Snow Leopard.Любая помощь будет оценена.
Спасибо, Марлен

Обновление вопроса:
Я установил tk @ 8.5.9_0 + кварц как schlenk , предложенный только дляполучить эту ошибку:

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.

Ответы [ 3 ]

3 голосов
/ 26 февраля 2011

Возможно, проблема в макпорте.Есть три версии Tk, которые вы можете использовать в качестве основы для своего ttk.Скриншот очень похож на старый X11 Tk, а не на аква-Tk.1. Тк через Х11.2. Tk, скомпилированный с Carbon 'windowingsystem -aqua' 3. Tk, скомпилированный с Cocoa

Так что вы должны попытаться либо построить вариант Tk 'quartz' с помощью macports, либо получить предварительно собранную версию (например, ActiveStates), котораяправильная версия уже построена.

Так что попробуйте:

sudo port build tk @8.5.9+quartz

Посмотрите здесь руководства для получения дополнительных рекомендаций: http://www.tkdocs.com/tutorial/install.html#installmac

2 голосов
/ 03 мая 2012

попробуй

style = ttk.Style()
print(style.theme_names())
style.theme_use('default') # change 'default' to something better
0 голосов
/ 23 февраля 2011

Я не играл с ttk, но у меня достаточно опыта с 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

...