Profilo di ubepp

Nome ubepp
Indirizzo email n/a
Messaggi1
  • Tkinter e ciclo while
    Forum >> Programmazione Python >> GUI
    Buongiorno
    premetto che di programmazione mi intendo pochissimo, copiazzando un po in giro sono riuscito a fare un piccolo programma che ha un minimo di senso.
    Si tratta di un robottino pilotato da raspberry che funziona con un interfaccia grafica fatta con tkinter.
    Sono bloccato su un ciclo while che non so come interrompere premendo il pulsante stop.
    allego il programma:

    try: import Tkinter as tk # verifico se il modulo tk è aperto con Py2
    except ImportError: import tkinter as tk # altrimenti lo apro con Py3

    import RPi.GPIO as GPIO #impoto la libreria gpio e la chiamo GPIO

    import time # Importo la libreria time

    GPIO.setmode (GPIO.BCM) #uso il metodo in/out BCM

    GPIO.setwarnings(False) #disabilito i messaggi di errore sulla gpio

    GPIO.setup(17,GPIO.OUT,initial=GPIO.LOW) # imposto gpio 17 come uscita e spento
    GPIO.setup(27,GPIO.OUT,initial=GPIO.LOW) # imposto gpio 27 come uscita e spento
    GPIO.setup(22,GPIO.OUT,initial=GPIO.LOW) # imposto gpio 22 come uscita e spento
    GPIO.setup(18,GPIO.OUT,initial=GPIO.LOW) # imposto gpio 18 come uscita e spento

    def mdavanti(): #definizione motore destra avanti
    GPIO.output(17,False)
    GPIO.output(27,False)
    GPIO.output(18,False)
    GPIO.output(22,False)
    GPIO.output(17,False)
    GPIO.output(27,True)
    time.sleep(1)

    def mdindietro(): #definizione motore destra indietro
    GPIO.output(17,False)
    GPIO.output(27,False)
    GPIO.output(18,False)
    GPIO.output(22,False)
    GPIO.output(17,True)
    GPIO.output(27,False)
    time.sleep(1)

    def msavanti(): #definizione motore sinistra avanti
    GPIO.output(17,False)
    GPIO.output(27,False)
    GPIO.output(18,False)
    GPIO.output(22,False)
    GPIO.output(18,False)
    GPIO.output(22,True)
    time.sleep(1)

    def msindietro(): #definizione motore sinistra indietro
    GPIO.output(17,False)
    GPIO.output(27,False)
    GPIO.output(18,False)
    GPIO.output(22,False)
    GPIO.output(18,True)
    GPIO.output(22,False)
    time.sleep(1)

    def stop(): #definizione robot stop
    GPIO.output(17,False)
    GPIO.output(27,False)
    GPIO.output(18,False)
    GPIO.output(22,False)

    def robotavanti():#definizione robot avanti
    GPIO.output(17,False)
    GPIO.output(27,False)
    GPIO.output(18,False)
    GPIO.output(22,False)
    GPIO.output(17,False)
    GPIO.output(27,True)
    GPIO.output(18,False)
    GPIO.output(22,True)
    time.sleep(1)


    def robotindietro(): #definizione robot avanti
    GPIO.output(17,False)
    GPIO.output(27,False)
    GPIO.output(18,False)
    GPIO.output(22,False)
    GPIO.output(17,True)
    GPIO.output(27,False)
    GPIO.output(18,True)
    GPIO.output(22,False)
    time.sleep(1)

    def automatico(): ################################ come faccio premendo il tasto stop a fermare questo ?????
    while 1:
    robotindietro()
    time.sleep(4)
    robotavanti()
    time.sleep( 8)
    msavanti()
    time.sleep(5)
    robotavanti()
    time.sleep(2)
    mdindietro()
    time.sleep(2)


    class Applicazione: # CREO INTERFACCIA GRAFICA

    def __init__ (self):

    self.form1 = tk.Tk() # creo la finestra principale
    self.form1.title("Frangesco Il Grosso") # titolo della finestra principale
    self.form1.resizable(False, False) # imposto la finestra non ridimensionabile
    self.form1.geometry("%dx%d+%d+%d" % (680,400,200,200))# imposto la posizione fissa della finestra
    # e le dimensioni
    self.frame1 = tk.Frame(self.form1) # creo il contenitore 1 nella finestra principale
    self.frame2 = tk.Frame(self.form1) # creo il contenitore 2 nella finestra principale
    self.frame3 = tk.Frame(self.form1) # creo il contenitore 3 nella finestra principale
    self.frame4 = tk.Frame(self.form1) # creo il contenitore 4 nella finestra principale



    self.avanti = tk.Button(self.frame1, text="AVANTI", command = robotavanti) # creo il pulsante avanti
    self.indietro = tk.Button(self.frame1, text="INDIETRO", command = robotindietro) # creo il pulsante indietro
    self.destra = tk.Button(self.frame1, text="DESTRA", command = mdavanti) # creo il pulsante destra
    self.sinistra = tk.Button(self.frame1, text="SINISTRA", command = msavanti) # creo il pulsante sinistra
    self.stop = tk.Button(self.frame1, text="STOP", command = stop) # creo il pulsante stop

    self.auto = tk.Button(self.frame2, text="AUTO", command = automatico) #, command = automatico) # creo il pulsante automatico



    self.frame1.configure(bg="yellow", width=350, height=200) # colore finestra 1
    self.frame2.configure(bg="red", width=350, height=200) # colore finestra 2
    self.frame3.configure(bg="blue", width=350, height=200) # colore finestra 3
    self.frame4.configure(bg="green", width=350, height=200) # colore finestra 4

    self.frame1.grid(row=0, column=0) #piazzo la finestra 1 sulla griglia
    self.frame2.grid(row=0, column=1) #piazzo la finestra 2 sulla griglia
    self.frame3.grid(row=1, column=0) #piazzo la finestra 3 sulla griglia
    self.frame4.grid(row=1, column=1) #piazzo la finestra 4 sulla griglia

    self.avanti.grid(row=0, column=3) #piazzo il pulsante avanti sulla griglia della finestra 1
    self.destra.grid(row=2, column=5) #piazzo il pulsante sinistra sulla griglia della finestra 1
    self.sinistra.grid(row=2, column=0) #piazzo il pulsante sinistra sulla griglia della finestra 1
    self.indietro.grid(row=3, column=3) #piazzo il pulsante sinistra sulla griglia della finestra 1
    self.stop.grid(row=5, column=3 ) #piazzo il pulsante indietro sulla griglia della finestra 2

    self.auto.grid(row=0, column=3) #piazzo il pulsante automatico sulla griglia della finestra 2

    def start(self):
    self.form1.mainloop() # lancio il programma
    GPIO.cleanup()

    app = Applicazione()
    app.start()
    Ringrazio tutti coloro che vorranno aiutarmi e sopratutto consigliarmi qualcosa di veramente basilare per capire il funzionamento di python e tkinter.


    --- Ultima modifica di ubepp in data 2017-05-09 16:25:46 ---