Как я могу многократно выводить данные с ползунка / шкалы tkinter, чтобы я мог отправлять постоянный поток чисел на другое устройство через последовательный порт? - PullRequest
0 голосов
/ 26 сентября 2019

По сути, я бы хотел посылать (через последовательный порт) значение шкалы tkinter примерно каждые 50 мс (или так часто, как я могу).Я хотел бы отправить эти данные, даже когда слайдер находится в неподвижном состоянии.Это для проекта, который я делаю, который будет включать управление квадрокоптером через Raspberry Pi.

Я знаком с функцией 'get ()' и с функцией 'command =', однако я не уверен, как использовать их, чтобы они могли выводить повторяющиеся значения.

import tkinter as tk
import serial

def outputValue(value):
    print(value)
    ser.write(value.encode())

def background(window, color):
    window.configure(bg = color)
    scale = tk.Scale(window, from_= 0, to= 20, command = outputValue)
    scale.pack()

ser = serial.Serial('/dev/ttyUSB0', 9600)
window = tk.Tk()
window.title("Drone Control")
background(window, "black")
window.mainloop()

Этовыводит значение один раз, когда ползунок перемещается, поэтому вы никогда не получите повторяющиеся числа, если вы не переместите ползунок назад и не вернетесь в положение.

Идеальным выходом будет тот, в котором значение выводится каждые x мс.

1 Ответ

1 голос
/ 26 сентября 2019

Я не могу протестировать с помощью последовательного порта, но приведенный ниже пример должен быть достаточно ясным, чтобы вы могли начать работу.

Мы можем использовать после для постоянной отправки данных в последовательный порт, а затем мы можем использовать ваш инструмент для масштабирования для обновления переменной.затем отправляется на серийный номер.

import tkinter as tk
# import serial

tracked_var = 0


def outputValue():
    print(tracked_var)
    #ser.write(value.encode())
    window.after(500, outputValue)


def update_tracked_variable(value):
    global tracked_var
    tracked_var = value


def background(color):
    window.configure(bg=color)
    scale = tk.Scale(window, from_=0, to=20, command=update_tracked_variable)
    scale.pack()


#ser = serial.Serial('/dev/ttyUSB0', 9600)
window = tk.Tk()
window.title("Drone Control")
background("black")
outputValue()
window.mainloop()
...