Page 1 sur 1

Python guizero et slider

Posté : dim. 26 févr. 2023 19:47
par caways
Bonjour à tou(te)s,

J'ai le projet de réaliser un réveil matin à base de Raspberry.
Je compte utiliser un écran tactile pour afficher l'heure et utiliser 2 "sliders" pour régler l'heure et les minutes du réveil.
J'utilise la librairie guizero mais, je ne parviens pas à récupérer la valeur du slider pour la réutiliser ultérieurement.
J'ai rédiger un petit programme en python mais pas moyen de trouver la méthode pour récupérer la valeur x qui reste toujours égale à 0 même si le curseur varie.

Pouvez-vous m'éclairer ?

Merci d'avance.

Caways.

Voici le programme :

from guizero import App, Text, Slider, TextBox, PushButton
import datetime

x = 0

def counter():
text_heure.value= datetime.datetime.now().strftime("%H:%M")

def slider_changed(slider_value):
global x
x = slider_value


def attrib() :
print(x)



app = App("Hello world")
text_heure = Text(app, text=datetime.datetime.now())


text_heure.repeat(1000, counter)
slider = Slider(app, command=slider_changed)
button=PushButton(app,attrib,text="Go")

print(x)


app.display()

Re: Python guizero et slider

Posté : dim. 26 févr. 2023 20:03
par domi
Bonjour
Ce message n'ayant pas sa place dans la section débutant, je déplace le sujet.

Merci de prêter attention aux rubriques afin qu'elles répondent au mieux à votre demande.

Re: Python guizero et slider

Posté : dim. 26 févr. 2023 20:18
par piper
Si possible mettre le code entre </> car sans cela, on ne voit pas les indentations
Hors les indentations sur Python identifient les blocks d'instruction
Sans cette information, le code est incompréhensible ou inutilisable tel quel

Ex :
def counter():
a=datetime.datetime.now().strftime("%H:%M")

Ceci provoque une erreur : la fonction counter n'est pas définie

Alors que ceci fonctionne :

Code : Tout sélectionner

def counter():
    a=datetime.datetime.now().strftime("%H:%M")

Re: Python guizero et slider

Posté : lun. 27 févr. 2023 20:39
par caways
Bonsoir,

J'ai un peu avancé sur le programme.
Qu'en pensez-vous ?

Bonne soirée,

Caways

Code : Tout sélectionner

from guizero import App, Text, Slider, TextBox, PushButton
import datetime

x = 0
y = 0
heure = 0
minute = 0


def counter():
    global heure
    global minute
    text_heure.value= datetime.datetime.now().strftime("%H:%M")
    heure = int(datetime.datetime.now().strftime("%H"))
    minute = int(datetime.datetime.now().strftime("%M"))

def slider_changed(slider_value):
    global x
    x = int(slider_value)

def slider1_changed(slider1_value):
    global y
    y = int(slider1_value)


def attrib() :
    print("x : ",x)
    print("y : ",y)
    
    if ((x == heure) and (y == minute)) :
        print("Levez-vous")
    else :
        print("dormez")

app = App("Hello world")
text_heure = Text(app, text=datetime.datetime.now())


text_heure.repeat(1000, counter)

slider = Slider(app, command=slider_changed)
slider1 = Slider(app, command=slider1_changed)
#button=PushButton(app,attrib,text="Go")

app.repeat(1000,attrib)


          
app.display()


          

Re: Python guizero et slider

Posté : mer. 1 mars 2023 23:40
par piper
C'est un début
Mais là, cela doit fonctionner normalement.
Comme je déteste l'utilisation des variables globales, voici une version (à l'arrache) en ne les utilisant pas, juste avec un objet basique que tu puisses voir que ce n'est pas compliqué d'utiliser des objets et que c'est une bonne habitude à prendre : cela rend la lecture du code beaucoup plus simple.

Code : Tout sélectionner

from guizero import App, Text, Slider, TextBox, PushButton
import datetime

class thedata():
    def __init__(self, x,y,heure,minute):
        self.x = x
        self.y = y
        self.heure = heure
        self.minute = minute
        
    def attrib(self) :
        print("x : ",self.x)
        print("y : ",self.y) 
        if ((self.x == self.heure) and (self.y == self.minute)) :
            print("Levez-vous")
        else :
            print("dormez")

def counter():
    text_heure.value= datetime.datetime.now().strftime("%H:%M")
    mydata.heure = int(datetime.datetime.now().strftime("%H"))
    mydata.minute = int(datetime.datetime.now().strftime("%M"))

def slider_changed(slider_value):
    mydata.x = int(slider_value)

def slider1_changed(slider1_value):
    mydata.y = int(slider1_value)

app = App("Hello world")
text_heure = Text(app, text=datetime.datetime.now())
mydata=thedata(0,0,0,0)

text_heure.repeat(1000, counter)

slider = Slider(app, command=slider_changed)
slider1 = Slider(app, command=slider1_changed)
#button=PushButton(app,attrib,text="Go")
app.repeat(1000,mydata.attrib)
         
app.display()

Re: Python guizero et slider

Posté : ven. 3 mars 2023 22:17
par caways
Bonsoir,

Merci pour ton intervention.
Je vais regarder cela de plus près.

Je suis débutant avec python et rencontre régulièrement des problèmes de déclarations de variables et d'interaction de celles-ci entre les différentes fonctions.

Encore un grand merci.

Caways

Re: Python guizero et slider

Posté : sam. 4 mars 2023 09:11
par piper
Bonjour,
Oui, j'ai déjà rencontré cela.
Soit de manière temporaire (au boot par exemple, pendant quelques secondes)
Soit de manière quasi permanente.

Et comme j'en ai eu marre, j'ai acheté , il y a des années ceci pour en avoir le coeur net (image)
Là, j'ai compris que connecter un disque USB 2,5 pouces mécanique au Raspberry n'est pas une bonne idée (ce type disque n'a qu'une prise : son USB et son alimentation se fait donc par le Raspberry)
Et que entre 2 alimentations officielles, on peut avoir des surprises
Image