ubepp
Profilo di
Nome | ubepp |
---|---|
Indirizzo email | n/a |
Messaggi | 1 |
-
- 2017-05-09 16:22:53
- 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(
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 ---