正在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()
我希望Scale
比Spinbox
占用更多的空间,但是事实恰恰相反。
我曾经以为这可能是因为我使用DoubleVar
时,由于十进制问题,字符串可能会变长,但是IntVar
却得到了相同的结果。请参见已注释掉的代码块。
怎么了?在这种情况下,我应该如何得到短Spinbox
和长Scale
?这是macOS专用的,操作系统在小部件上加上一些最小尺寸吗?
答案 0 :(得分:2)
您可以设置Spinbox的宽度。例如:
spin = tk.Spinbox(mainframe, textvariable=input, wrap=True, width=5)
答案 1 :(得分:2)