我在GUI中有一个Tkinter ttk.Scale
。我想要做的是在顶部或底部(或侧面,如果它的垂直)添加一些标签,显示用户正在选择的值。我有一个最低工作示例如下所示。
我的问题来自于我无法弄清楚如何让Scale与标签对齐。它设置为跨越标签的所有列,但Scale小部件带有一个length关键字,可自动强制它的大小为100像素。我不能先验地知道如何设置该长度,我无法弄清楚如何告诉它填充其网格空间。
有没有办法告诉Scale选择一个长度以填充其网格空间?
import tkinter as tk
from tkinter import ttk
def show_values():
print (w1.get())
def scaleFunc(val):
scaleVal = float(w1.get())
if int(scaleVal) != scaleVal:
w1.set(round(float(val)))
root = tk.Tk()
for i,text in enumerate(['O','B','A','F','G','K','M','L']):
ttk.Label(root, text = text).grid(row=0,column=i,padx=10)
w1 = ttk.Scale(root, to=7, command=scaleFunc, length=None)
w1.grid(row = 1, column = 0, columnspan = 8,ipadx=0)
ttk.Button(root, text='Show', command=show_values).grid(row=2,column=0,columnspan=8)
root.mainloop()
答案 0 :(得分:1)
我想我应该多玩一点。看起来Scale小部件会侦听网格管理器中的sticky
关键字。
w1 = ttk.Scale(root, to=7, command=scaleFunc, length=None)
w1.grid(row=1,column=0,columnspan=8,padx=(10,7),sticky='NSEW')
答案 1 :(得分:0)
您可以使用以下任一解决方案之一:
解决方案1:w1.grid(row = 1, column = 0, columnspan=8, sticky='ew')
解决方案2:w1 = ttk.Scale(root, to=7, command=scaleFunc, length=250)
第一种解决方案更清洁。