为什么tkinter按钮的高度选项在OSX和Windows上表现不同?

时间:2014-08-05 08:16:37

标签: python windows macos button tkinter

我有相同的代码,其中包含以下行

self.button = Button(frame, text="CALCOLA", width=28, height=2, command=callback)

当我在OSX下运行代码时,按钮是单行按钮,但在其他小部件的上方和下方分开。 而在窗户下,按钮的高度为两条线,因此它在上方和下方连接到其他项目,如图片所示。

OSX GUI

Win GUI

有没有办法在两个系统中获得相同的结果? 此外,我注意到两个系统下的按钮宽度并不完全相同,是否也可以对宽度采用相同的行为?

1 个答案:

答案 0 :(得分:2)

Tk小部件应该具有"原生外观和感觉,虽然它们有点过时了。所以他们看起来有点不同。如果你希望所有东西都看起来类似于跨平台,那么一个选择就是使用画布,尽管这需要大量的工作。我会专注于让它在两个平台上看起来都是可接受/好的,而不是让它看起来完全相似。

但是,窗口小部件的宽度基于字符而不是像素。如果粗略估计,两者都适合大约28个字符(OSX似乎在所有方面都有更多的余量)。所以字体很重要。

确保默认字体/字体大小完全相同。

import Tkinter
import tkFont

root = Tk()
tkFont.nametofont("TkDefaultFont").actual()

我的Windows 7: {'家庭':' Segoe UI','体重&#39 ;:'正常','倾斜':' ;罗马','重击':0,'强调':0,'尺寸':9}

我的Windows Server 2008: {'家庭':' Tahoma','体重':'正常','倾斜':'罗马','重击':0,' und erline':0,' size':8}

还有更多默认字体,例如:" TkTextFont"

如果使用相同的字体,它应该看起来更相似。

enter image description here

前两个按钮带有" CALCOLA"在我的Windows 7系统上。第一个使用默认系统设置。第二个具有以下设置:

root.option_add("*Button.Font", "Tahoma 8 bold roman normal underline")
Tkinter.Button(root, text="CALCOLA").pack()

带有" CALCOLA"的第三个按钮是我的Windows 2008 Server System中的一个按钮,带有默认设置。您还可以更改背景颜色:

root.option_add("*Button.Background", "white")
Tkinter.Button(root, text="CALCOLA").pack()

您还可以更改所有新元素的背景:

root.option_add("*Background", "blue")
Tkinter.Button(root, text="CALCOLA").pack()
Tkinter.Label(root, text="CALCOLA").pack()

更新:

宽度和高度均基于字体,文本和边缘之间的边距基于OS特定主题。但您可以配置更多设置,例如按钮:

' highlightThickness' '文本' '图像' '化合物' '高度' '边框宽度' ' padY' ' padX' '字体' ' activeForeground' ' activeBackground' '下划线' '宽度' '状态' ' highlightColor' ' textVariable' ' overRelief' ' takeFocus' ' -borderwidth' '前景' ' -background' '按repeatInterval' ' repeatDelay' '背景' ' -foreground' '位图' ' highlightBackground' ' disabledForeground' ' wrapLength' '默认' '光标' '命令' '浮雕' '锚' '证明'

将至少padY和padX设置为类似的值也应该有助于使两个操作系统中的外观更相似。你可以得到这样的当前设置:

print(
    root.option_get("padY", "Button"),
    root.option_get("padX", "Button"),
)