Почему для виджета масштаба tkinter требуется переменная tkinter - PullRequest
0 голосов
/ 12 ноября 2018

Я понимаю, что вам не нужно указывать переменную для такого масштаба:

scale = tk.Scale(root, from_ = 1, to = 100) # makes scale without variable
scaleValue = scale.get() # sets value to scale

Мне, однако, нужен способ задания переменной в реальном времени и каждый раз, когда изменяется значение шкалы. Есть ли способ заставить это работать без постоянного сброса scaleValue на scale.get()?

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Если вы используете что-то вроде IntVar() для отслеживания значения, вы можете видеть, что оно автоматически обновляется функцией, которая проверяет текущее значение.

Если вы хотите, чтобы значение отображалось и возвращалось как число с плавающей точкой, вы можете использовать DoubleVar(), а затем также установить resolution=0.01 в качестве аргумента в виджете Scale.

import tkinter as tk

class Example(tk.Tk):
    def __init__(self):
        super().__init__()
        self.int_var = tk.IntVar()
        self.scale = tk.Scale(self, from_=1, to=100, variable=self.int_var)
        self.scale.pack()

        tk.Button(self, text="Check Scale", command=self.check_scale).pack()

    def check_scale(self):
        print(self.int_var.get())


if __name__ == "__main__":
    Example().mainloop()

Результаты:

enter image description here

Например, используя DoubleVar(), вы можете сделать это:

import tkinter as tk

class Example(tk.Tk):
    def __init__(self):
        super().__init__()
        self.dou_var = tk.DoubleVar()
        self.scale = tk.Scale(self, from_=1, to=100, resolution=0.01, variable=self.dou_var)
        self.scale.pack()

        tk.Button(self, text="Check Scale", command=self.check_scale).pack()

    def check_scale(self):
        print(self.dou_var.get())


if __name__ == "__main__":
    Example().mainloop()

Результаты:

enter image description here

0 голосов
/ 12 ноября 2018

Если сделать переменную tkinter с помощью variable = tk.DoubleVar(), она автоматически обновит variable, когда произойдет изменение.

scaleVar = tk.DoubleVar
scale = tk.Scale(
    root,
    from_ = 1,
    to = 100,
    variable = scaleVar    # makes scale with updating variable
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...