Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface 如何使我的ttk小部件看起来现代?_User Interface_Python 3.x_Tkinter_Macports_Ttk - Fatal编程技术网

User interface 如何使我的ttk小部件看起来现代?

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() 我很乐意从我的计算机上提供回答这个问题所

我在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()
我很乐意从我的计算机上提供回答这个问题所需的任何信息。由于我是一个新手程序员,请告诉我在哪里可以找到上述信息

我有一台装有雪豹的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