User interface 如何使我的ttk小部件看起来现代?
我在mac上遇到tkinter.ttk问题。我正在使用macports和python3.1。当我尝试使用tkinter.ttk时,我得到了非常旧的gui元素 我明白了User interface 如何使我的ttk小部件看起来现代?,user-interface,python-3.x,tkinter,macports,ttk,User Interface,Python 3.x,Tkinter,Macports,Ttk,我在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() 我很乐意从我的计算机上提供回答这个问题所
而不是这个:
我使用的代码是:
from tkinter import *
from tkinter import ttk
root = Tk()
button = ttk.Button(root, text="Hello World").grid()
root.mainloop()
我很乐意从我的计算机上提供回答这个问题所需的任何信息。由于我是一个新手程序员,请告诉我在哪里可以找到上述信息
我有一台装有雪豹的MacBook5,2。任何帮助都将不胜感激。谢谢,马伦 问题更新:
我按照schlenk的建议安装了tk@8.5.9_0+quartz,但出现了以下错误:
TclMacOSXNotifierAddRunLoopMode: Tcl not built with CoreFoundation support Abort trap
我用来自的修补程序修复了此错误。我不折不扣地遵照指示(如下所示):
$cd/opt/local/var/macports/sources/rsync.macports.org/release/ports/lang/tcl
$sudo补丁<~/Downloads/tcl.2.patch
$sudo端口安装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.
回溯(最近一次呼叫最后一次):
文件“hello.py”,第5行,在
root=Tk()
文件“/opt/local/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/tkinter/_init__.py”,第1632行,在_init中__
self.tk=\u tkinter.create(屏幕名、基本名、类名、交互、wantobjects、useTk、同步、使用)
_tkinter.TclError:在以下目录中找不到可用的tk.tcl:
/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/Versions/3.1/Resources/Python.app/Contents/Library
/opt/local/lib/tk8.5/tk.tcl:包“tk”的版本冲突:有8.5.7,正好需要8.5.9
包“Tk”的版本冲突:有8.5.7,正好需要8.5.9
执行时
“包装要求-精确Tk 8.5.9”
(文件“/opt/local/lib/tk8.5/tk.tcl”第20行)
从内部调用
“source/opt/local/lib/tk8.5/tk.tcl”
(“uplevel”车身第1行)
从内部调用
“uplevel#0[列出源$file]”
这可能意味着tk没有正确安装。
我没有玩过ttk,但是我对tkinter有相当多的经验。我相信你必须填写style关键字参数
我想应该是这样的
from tkinter import *
from tkinter import ttk
root = Tk()
button = ttk.Button(root, text="Hello World", style="somestyle").grid()
root.mainloop()
链接到一些相关文档:
问题可能是macports。有三个版本的Tk可以用作ttk的基础。屏幕截图看起来很像旧的X11 Tk,而不是基于aqua的Tk。 1.Tk通过X11。 2.Tk使用Carbon“windowingsystem-aqua”编译 3.用Cocoa编译的Tk 因此,您应该尝试通过macports构建Tk变体“quartz”,或者您应该获得一些已经构建了正确版本的预构建版本(例如ActiveState) 因此,请尝试:
sudo port build tk @8.5.9+quartz
请查看此处的教程以获取更多指导:
试试看
style = ttk.Style()
print(style.theme_names())
style.theme_use('default') # change 'default' to something better
恐怕我又没解释清楚。默认值应该看起来像图像B。相反,它看起来像图像A。为什么?当我运行hello.py(我问题中的代码)时,使用tk@8.5.9_0+quartz(活动)时,我得到错误TcmacosxNotifiedRadDrunlopmode:Tcl未使用CoreFoundation support Abort trap构建。如果我修复了此问题,我将发布解决方案。我通过按照上的修补说明修复了此错误。当然,这造成了另一个错误。。。我将更新我的问题,因为错误相当复杂。造成这种糟糕状况的一个原因是,OS X上的大多数Tcl/Tk开发现在都是为Cocoa(decarbon)分支完成的,因此从这一点开始可能更容易:Tk+quartz实际上构建时没有错误,错误发生在我运行测试程序时。我甚至没有试图让它工作的计算机,而且它太旧了,(可能)不再相关,所以我将把它标记为@schlenk的答案,因为他们在回答这个问题上投入了最多的精力。
style = ttk.Style()
print(style.theme_names())
style.theme_use('default') # change 'default' to something better