MacOS 与 Windows 上的 Tkinter 网格列间距是否存在固有差异?如果是这样,我该如何解决?

Is there an inherent difference in Tkinter grid column spacing on MacOS vs Windows? If so, how do I get around that?

我一直在浏览一些 tkinter 视频教程和文档,试图掌握使用网格布局分隔事物的窍门,以便将其用于我自己的应用程序,但是当我尝试使用网格间距时,它似乎添加了我没有编码的额外 spacing/padding。

我对此研究得越多,就越像是 MacOS 与 Windows 的问题,但如果是这样的话,有人知道解决办法吗?

例如,我只是尝试复制并粘贴在此 link 中找到的计算器代码:https://zetcode.com/tkinter/layout/,但我得到了两个截然不同的结果。

上图是示例页面中的图片,看起来像是在 windows 上完成的,而下图是我 copy/pasted 代码并尝试使用时发生的情况我自己。

这个间距 不坏,如果我必须处理它,我想我会这样做,但是当我尝试下面的代码时一个视频教程,我的布局在间距上大不相同。

我也 link 编辑了视频,因为有一次,编码员遇到了一些类似的间距,但随后修复了它,并且输入相同的代码并没有为我带来相同的修复。

from tkinter import *

root=Tk()
root.title("Simple Calculator")

e = Entry(root, width=35, borderwidth=5)
e.grid(row=0, column=0, columnspan=3, padx=10, pady=10)

def button_click(number):
    #e.delete(0, END)
    e.insert(0, number)

# Define Buttons

button_1 = Button(root, text="1", padx=40, pady=20, command=lambda: button_click(1))
button_2 = Button(root, text="2", padx=40, pady=20, command=lambda: button_click(2))
button_3 = Button(root, text="3", padx=40, pady=20, command=lambda: button_click(3))
button_4 = Button(root, text="4", padx=40, pady=20, command=lambda: button_click(4))
button_5 = Button(root, text="5", padx=40, pady=20, command=lambda: button_click(5))
button_6 = Button(root, text="6", padx=40, pady=20, command=lambda: button_click(6))
button_7 = Button(root, text="7", padx=40, pady=20, command=lambda: button_click(7))
button_8 = Button(root, text="8", padx=40, pady=20, command=lambda: button_click(8))
button_9 = Button(root, text="9", padx=40, pady=20, command=lambda: button_click(9))
button_0 = Button(root, text="0", padx=40, pady=20, command=lambda: button_click(0))
button_add = Button(root, text="+", padx=39, pady=20, command=lambda: button_click(7))
button_equal = Button(root, text="=", padx=98, pady=20, command=lambda: button_click(7))
button_clear = Button(root, text="clear", padx=88, pady=20, command=lambda: button_click(7))

# Put the buttons on the Screen

button_1.grid(row=3, column=0)
button_2.grid(row=3, column=1)
button_3.grid(row=3, column=2)

button_4.grid(row=2, column=0)
button_5.grid(row=2, column=1)
button_6.grid(row=2, column=2)

button_7.grid(row=1, column=0)
button_8.grid(row=1, column=1)
button_9.grid(row=1, column=2)

button_0.grid(row=4, column=0)
button_add.grid(row=5, column=0)

button_equal.grid(row=5, column=1, columnspan=2)
button_clear.grid(row=4, column=1, columnspan=2)


root.mainloop()

第一张图是我的,第二张是码农's/YouTuber的。此处列之间的 spacing/padding 似乎太多了,以至于在构建 UI 时无法“处理”。有人有解决方法吗?我想要一些看起来更干净、更简洁的东西,显然是-Windows layout/spacing。

padxpady 取决于屏幕的分辨率(您应该查找每个小部件的方法),因为大小以像素为单位。 您可以尝试放置,有 3 种方法可以在 tkinter 中放置按钮、标签等。 grid()pack()place()。您应该使用您觉得舒服并适合您需要的那个。你也许可以尝试这样的事情:

from tkinter import *

root=Tk()
root.title("Simple Calculator")

e = Entry(root, width=35, borderwidth=5)
e.grid(row=0, column=0, columnspan=3, padx=10, pady=10)

def button_click(number):
    #e.delete(0, END)
    e.insert(0, number)

# Define Buttons

button_1 = Button(root, text="1", padx=40,pady=20,command=lambda: button_click(1))

#Place Buttons

button_1.place(relx=FLOAT,rely=FLOAT,relheight=FLOAT,relwidth=FLOAT)



root.mainloop()

relxrely 是 水平和垂直偏移量作为 0.0 和 1.0 之间的浮点数,作为父部件高度和宽度的分数。因此,在 place 中,您可以根据主要 window 调整您的小部件。 (relheightrelwidth同理) https://www.tutorialspoint.com/python/tk_place.htm

如果标题是你的问题,那么不,Windows 和 macOS 之间没有重大区别。但大小取决于您正在查看的显示分辨率。

例如,第一张图片是在不同的分辨率下完成的,第二张也是。您应该尝试 padxpady 以使其适合您的分辨率。

padxpady 默认情况下始终是像素,因此在不同的分辨率(屏幕分辨率也是像素)上根据值看起来会有所不同。

在mac上试用代码时的图像OS big sur 11.3.1 1920x1080:

在 mac 上尝试代码时的图像OS big sur but 1440x990 of @roganjosh:

如您所见,它是 macOS 本身,但是当您检查按钮的宽度时,结果再次不同,与 youtuber 在 Windows 中得到的结果非常相似。

但是您还可以看到图像之间的水平距离也在 OS 之间发生变化。

使用 padx 和 pady = 0

.grid(padx = 0,pady=0)

这应该会减少中间的间距,并且看起来像所需的图片