Tkinter Scale Widget - Непрерывная работа - PullRequest
0 голосов
/ 19 февраля 2020

Newb ie вопрос: Как заставить шкалу tkinter работать непрерывно, чтобы при каждом изменении значения записывалось новое значение (в I2 C или в файл), и это повторяется до тех пор, пока пользователь не завершит операцию общая программа (на GUI должны быть элементы управления нескольких масштабов, пока пользователь не закроет программу). Цель состоит в том, чтобы сохранить значения громкости, измененные с помощью ползунка. У меня не было проблем с кнопками, вводом текста, радиокнопками, но я просто не вижу, что мне нужно добавить для достижения этой цели. Вот код:

from tkinter import *  # Python 3
from math import log10

root = Tk()
root.title("Fidelity Science Audio Control GUI")
root.geometry("500x500")
Volume = IntVar
Vol = Scale(root, variable=Volume, from_=0, to=100, tickinterval=10, orient=VERTICAL,
       length=400, width=20, borderwidth=10, background="light blue", foreground="black",
       troughcolor="light blue", label="Volume")
Vol.set(50)
Vol.grid(row=10, column=1)
if Vol.get() > 0:
    Volume = Vol.get()
    LogVolume = log10(Volume)
    print("Volume = ", Volume)
    print("Value sent To I2C =", LogVolume)

root.mainloop()

Нужно ли использовать функцию al oop как while или if? Спасибо!

1 Ответ

0 голосов
/ 19 февраля 2020

Вы можете использовать обратный вызов, связанный с параметром Scale через command, для отправки тома в I2 C при изменении значения Scale:

from tkinter import *  # Python 3
from math import log10

def on_volume_change(volume):
    if volume > 0:
        LogVolume = log10(volume)
        print("Volume =", volume)
        print("Value sent to I2C =", LogVolume)
        # send the volume to I2C

root = Tk()
root.title("Fidelity Science Audio Control GUI")
root.geometry("500x500")

Volume = IntVar(value=50)
Vol = Scale(root, variable=Volume, from_=0, to=100, tickinterval=10, orient=VERTICAL,
            length=400, width=20, borderwidth=10, background="light blue", foreground="black",
            troughcolor="light blue", label="Volume", command=on_volume_change)
Vol.grid(row=10, column=1)

# send the initial volume
on_volume_change(Volume.get())

root.mainloop()
...