制作tkinter Scale跨越它的完整网格单元格

时间:2017-03-15 02:25:59

标签: python user-interface tkinter

我在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()

enter image description here

2 个答案:

答案 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)

第一种解决方案更清洁。