gpt4 book ai didi

python - Tkinter - Spinbox 看起来比预期的要长

转载 作者:太空宇宙 更新时间:2023-11-04 09:34:49 25 4
gpt4 key购买 nike

在 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 占用更多空间,但结果恰恰相反。

Result

我原以为可能是因为我使用了 DoubleVar,由于小数问题,字符串可能会变长,但是 IntVar 给了我相同的结果。查看被注释掉的代码块。

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

最佳答案

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

A Spinbox has a default width of 20 (in character units), unless specified.

A Scale has a default length of 100 (in pixels), unless specified.

这就是为什么要让 Spinbox 如此之大而 Scale 相对较小的原因。

要修复它,您可以自己指定它们,如下所示:

spin = tk.Spinbox(mainframe, textvariable=input, wrap=True, <b>width=1</b>)
slide = tk.Scale(mainframe, variable=input, orient='horizontal', <b>length=200</b>)

Result

关于python - Tkinter - Spinbox 看起来比预期的要长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54182903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com