Неизвестная опция для виджета масштаба tkinter - PullRequest
0 голосов
/ 19 июня 2019

Я кодирую GUI, где вы должны ввести номер.Я хочу иметь весы, но они очень хорошо соответствуют моим целям.Проблема в том, что шкала идет с точностью 1е-9.Это очень точно для меня.Я использую расширение ttk для tkinter.Я попробовал пару вещей, но я увидел, что есть опция цифр для шкалы, которая, когда есть StringVar (), оставляет количество цифр, но не работает, она не может распознать эту опцию.Я пытался заглянуть в библиотеку, но ничего не смог найти, это было слишком сложно.Вот как формируется мой код.

scaleValue = StringVar()
scale = ttk.Scale(content, orient=HORIZONTAL, from_=1, to=5, variable=scaleValue, length=150, digits=1)  # here digits ins't recongnised
scale.grid(column=x, row=y)

scaleValueLabel = ttk.Label(content, textvariable=scaleValue)
scaleValueLabel.grid(column=x', row=y')

Вот документация:

Целое число, указывающее, сколько значащих цифр следует сохранить при преобразовании значения шкалы встрока. Официальная документация: http://www.tcl.tk/man/tcl8.6/TkCmd/scale.htm

1 Ответ

1 голос
/ 19 июня 2019

digits - параметр, доступный только для tk.Scale.Если вы переключитесь на его использование, то ваш код будет работать:

scale = tk.Scale(root, orient=tk.HORIZONTAL, from_=1, to=5, variable=scaleValue, length=150, digits=5)

Но если вы действительно хотите использовать ttk.Scale, вы можете использовать другой подход.Вместо использования textvariable в вашем Label вы можете отслеживать изменения в вашей переменной, сначала обрабатывать значение, а затем возвращаться к вашему Label.

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

scaleValue = tk.DoubleVar()
scale = ttk.Scale(root, orient=tk.HORIZONTAL, from_=1, to=5, variable=scaleValue, length=150)  # here digits ins't recongnised
scale.grid(column=0, row=0)

scaleValueLabel = tk.Label(root, text="0")
scaleValueLabel.grid(column=0, row=1)

def set_digit(*args):
    scaleValueLabel.config(text="{0:.2f}".format(scaleValue.get()))

scaleValue.trace("w", set_digit)

root.mainloop()
...