Python Tkinter-Spinbox看起来比预期的长

Python Tkinter-Spinbox看起来比预期的长,python,python-3.x,macos,tkinter,Python,Python 3.x,Macos,Tkinter,运行从macOS Mojave上的python.org下载的Python3.7 我使用以下代码来排列Spinbox和Scale来控制同一变量。但是,外观并不是我所期望的: import tkinter as tk root = tk.Tk() mainframe = tk.Frame(root) # Model input = tk.DoubleVar(value=0.) # input = tk.IntVar(value=0) spin = tk.Spinbox(mainframe, t

运行从macOS Mojave上的python.org下载的Python3.7

我使用以下代码来排列
Spinbox
Scale
来控制同一变量。但是,外观并不是我所期望的:

import tkinter as tk

root = tk.Tk()
mainframe = tk.Frame(root)

# Model

input = tk.DoubleVar(value=0.)
# input = tk.IntVar(value=0)
spin = tk.Spinbox(mainframe, textvariable=input, wrap=True)
slide = tk.Scale(mainframe, variable=input, orient='horizontal')
spin['to'] = 1.0
spin['from'] = 0.0
spin['increment'] = 0.01
slide['to'] = 1.0
slide['from'] = 0.0

# spin['to'] = 100
# spin['from'] = 0
# spin['increment'] = 1
# slide['to'] = 100
# slide['from'] = 0

# Layout

weights = {'spin': 1, 'slide': 1000}

mainframe.grid_rowconfigure(0, weight=1)
mainframe.grid_columnconfigure(0, weight=weights['spin'])
mainframe.grid_columnconfigure(1, weight=weights['slide'])
spin.grid(row=0, column=0, sticky='news')
slide.grid(row=0, column=1, sticky='news')

root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
mainframe.grid(row=0, column=0)

root.mainloop()
我预计
比例
会比
旋转框
占用更多的空间,但结果恰恰相反

我曾认为可能是因为我使用了
DoubleVar
,由于十进制问题,字符串可能变长,但是
IntVar
给出了相同的结果。请参阅注释掉的代码块


怎么了?在这种情况下,我应该如何获得一个短的
Spinbox
和一个长的
Scale
?这是macOS特有的吗?操作系统在小部件上施加了一些最小尺寸

您可以设置Spinbox的宽度。例如:

spin = tk.Spinbox(mainframe, textvariable=input, wrap=True, width=5)

您可以设置Spinbox的宽度。例如:

spin = tk.Spinbox(mainframe, textvariable=input, wrap=True, width=5)
一些tkinter小部件的某些属性具有默认值

除非另有规定,否则
旋转框的默认宽度为
20
(以字符单位

除非另有规定,否则
比例的默认长度为
100
(以像素为单位)

这就是为什么
Spinbox
如此之大而
比例相对较小的原因

要解决此问题,您可以自己指定它们,如下所示:

spin = tk.Spinbox(mainframe, textvariable=input, wrap=True, width=1)
slide = tk.Scale(mainframe, variable=input, orient='horizontal', length=200)
spin=tk.Spinbox(大型机,textvariable=input,wrap=True,width=1)
slide=tk.Scale(大型机,变量=输入,方向=水平,长度=200)

一些tkinter小部件的某些属性具有默认值

除非另有规定,否则
旋转框的默认宽度为
20
(以字符单位

除非另有规定,否则
比例的默认长度为
100
(以像素为单位)

这就是为什么
Spinbox
如此之大而
比例相对较小的原因

要解决此问题,您可以自己指定它们,如下所示:

spin = tk.Spinbox(mainframe, textvariable=input, wrap=True, width=1)
slide = tk.Scale(mainframe, variable=input, orient='horizontal', length=200)
spin=tk.Spinbox(大型机,textvariable=input,wrap=True,width=1)
slide=tk.Scale(大型机,变量=输入,方向=水平,长度=200)

您是否尝试过显式地给spinbox一个宽度?您是否尝试过显式地给spinbox一个宽度?好的,我有一个错误的想法,网格系统将只考虑使用权重调整小部件的大小,而小部件在这方面是完全被动的,但现在我知道它们可以主动调整自己的大小。谢谢好吧,我有一个错误的想法,网格系统将只考虑小部件的权重调整,小部件在这方面是完全被动的,但现在我知道它们可以主动调整自己的大小。谢谢