我有相同的代码,其中包含以下行
self.button = Button(frame, text="CALCOLA", width=28, height=2, command=callback)
当我在OSX下运行代码时,按钮是单行按钮,但在其他小部件的上方和下方分开。 而在窗户下,按钮的高度为两条线,因此它在上方和下方连接到其他项目,如图片所示。
有没有办法在两个系统中获得相同的结果? 此外,我注意到两个系统下的按钮宽度并不完全相同,是否也可以对宽度采用相同的行为?
答案 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"
如果使用相同的字体,它应该看起来更相似。
前两个按钮带有" 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"),
)