Как запустить al oop, когда работает отдельный код tinter - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь сделать ползунок в python с помощью tkinter, и все oop постоянно обновляют данные из ползунка. В конечном продукте я хочу, чтобы ряд светодиодов буквально загорелся на слайдере. Проблема в том, что пока l oop останавливает работу остального кода, и окно с ползунком не открывается. Вот мой код:

import RPi.GPIO as GPIO
from tkinter import * 
GPIO.setmode(GPIO.BCM)
GPIO.setup(26, GPIO.OUT) 
GPIO.setwarnings(False)

def value():
       led.get() 

master = Tk()
master.geometry('100x100')
led = Scale(master, from_=5, to=1) 
led.pack()

while True: 
        print(value()) 

mainloop() 

1 Ответ

0 голосов
/ 16 апреля 2020

tkinter имеет root.after(millisecond, function) для запуска функции с некоторой задержкой, и вы можете использовать ее для повторения некоторой функции - так что она будет работать аналогично l oop, но не будет блокировать mainloop()

import tkinter as tk # PEP8: `import *` is not preferred

# --- function ---

def value():
    print(led.get())

    # run again after 1000ms 
    master.after(1000, value)

# --- main --

master = tk.Tk()

led = tk.Scale(master, from_=5, to=1) 
led.pack()

# run first time at once
#value()

# or run fist time after 1000ms
master.after(1000, value)

master.mainloop() 

Кстати: в after() вы должны использовать имя функции без () и без аргументов. Если вам нужно работать с аргументами, тогда master.after(1000, value, arg1, arg2, ...)


PEP 8 - Руководство по стилю для Python Код


BTW : Вы можете назначить функцию для Scale, и она будет запускаться, когда `Масштаб изменяет значение - и вам не понадобится l oop для ее проверки.

import tkinter as tk # PEP8: `import *` is not preferred

# --- function ---

def on_change(new_value):
    print(led.get())
    print(new_value)

# --- main --

master = tk.Tk()

led = tk.Scale(master, from_=5, to=1, command=on_change) 
led.pack()

master.mainloop() 

Документация (effbot.org ): Масштаб

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...