DOMANDA [Python] Progetto Turtle

Stato
Discussione chiusa ad ulteriori risposte.

Cotrox

Nuovo Utente
Salve ragazzi, da poco tempo mi sto immergendo nel mondo di Python e di questa parte di programmazione... fino ad ora avevo solo provato a fare qualche grafica in HTML/CSS per siti web o cose simili... ora...

Dovrei creare un progetto entro febbraio e stavo pensando di fare un programmino per disegnare.

Devo necessariamente utilizzare Turtle o cImage.

Dunque stavo provando a fare qualcosa con Turtle iniziando dalla funzione utile per disegnare.. ora...

Innanzi tutto non ho la più pallida idea di come creare l'interfaccia grafica del programma, inserire bottoni etc... sapreste darmi qualche dritta?

Seconda cosa... stavo cercando di capire come far si che turtle segua il movimento del mouse quando il tasto sx è premuto e mantenuto tale.

Credo serva qualcosa del tipo turtle.onclick... ma non so come far funzionare la cosa... sapreste darmi una mano? :)
 

Andretti60

Utente Èlite
3,418
2,294
Hardware Utente

Cotrox

Nuovo Utente
Perfetto, grazie infinite, ho cercato qualcosa di fretta prima di creare il post ma non trovavo ciò di cui avevo bisogno, spero vada bene :P
Post automaticamente unito:

Per seguire il mouse, devi usare l'evento ondrag()
Qui e' la definizione, puoi trovare molti esempi in rete.
https://docs.python.org/2/library/turtle.html#turtle.ondrag

Per creare una interfaccia grafica in Python devi usare un apposito package tipo il popolare (molto semplice, ma va benissimo per iniziare) tkinter
In rete trovi moltissimi tutorial, questo per esempio e' ben fatto (clicca il menu a sinistra)
https://www.python-course.eu/python_tkinter.php
Allora, ho provato a dare un'occhiata ma ora devo lasciare il PC e ci sto sbattendo un po' su la testa (come è giusto che sia ahah)

però ancora non ottengo grandi risultati, (sto però imparando a far comunicare le funzioni... credo ahah)

Ecco cosa stavo provando a fare:
Python:
import turtle as t

x_pensize = 4
x_bgcolor = '#256712'
x_pencolor = '#fff'
cordinate_base = (0,0)

def t_caratteristiche():
    t.bgcolor(x_bgcolor)
    t.color(x_pencolor)
    t.speed(999)
    t.pensize(x_pensize)
    t.right(90)
    t.up()
    
t_caratteristiche()
    
def t_movimenti():
    t.goto(get_coordinate)
    t.down()
    t.ht()
    
    t.onrelease(rilascio_penna)

def get_coordinate(x_cor,y_cor):
    x_cor = t.onscreenclick.position
    y_cor = t.onscreenclick.position

def rilascio_penna():
    t.st()
    t.up()
    t.goto(cordinate_base)
    
t.onscreenclick(t_movimenti, btn=1, add=None)
    
t.done()
L'errore (ammesso che ci sia solo questo ahah) dovrebbe appartenere alla funzione t_movimenti() , come se non ricevesse le coordinate... cosa sbaglio?
 
Ultima modifica:

Cotrox

Nuovo Utente
Ok, ma non riesco comunque a risolvere, ora provo con più calma e vi farò sapere.

al momento ho un dubbio: quando chiamo una funzione precedentemente definita ad esempio quando ho scritto t.goto(get_coordinate) è giusto scrivere cosi o dovrei scrivere
Codice:
t.goto(get_coordinate())
Post automaticamente unito:

Ho provato ma:
Se aggiungo ad esempio x,y nella funzione movimenti continua dandomi una serie di errori... oltretutto i valori messi sottoforma di def t_movimenti(x, y) esattamente a cosa servono?
Io nella funzione ho messo una serie di istruzioni ma quelle x,y come mai?
 
Ultima modifica:

Andretti60

Utente Èlite
3,418
2,294
Hardware Utente
No. Le funzioni vanno chiamate con i parametri giusti, per esempio turtle.goto deve avere due parametri, i valori delle coordinate.
Che editor/debugger stai usando? Ti aiuterebbe mettere un breakpoint nei punti "sospetti" e quando ci arrivi controlla che i vari parametri abbiano le coordinate giuste. I debugger sono fatti apposta per quello (io uso Idle)
 

Cotrox

Nuovo Utente
Anche io lo sto usando al momento il codice è questo:
Python:
import turtle as t

x_pensize = 4
x_bgcolor = '#256712'
x_pencolor = '#fff'
cordinate_base = (0,0)
x_cor = 0
y_cor = 0

def t_caratteristiche():
    t.bgcolor(x_bgcolor)
    t.color(x_pencolor)
    t.speed(999)
    t.pensize(x_pensize)
    t.right(90)
    t.up()
   
t_caratteristiche()
   
def t_movimenti():
    t.goto(x_cor, y_cor)
    t.down()
    t.ht()
   
    t.onrelease(rilascio_penna)

def get_coordinate(x_cor,y_cor):
    x_cor = t.onscreenclick.position
    y_cor = t.onscreenclick.position

def rilascio_penna():
    t.st()
    t.up()
    t.goto(cordinate_base)
   
t.onscreenclick(t_movimenti, btn=1, add=None)
   
t.done()
In t.goto al posto di (x_cor, y_cor) ci avevo messo la funzione che le gestiva cioè avevo scritto (get_coordinate) non va bene fare cosi?
Oltre questo non capisco come mai t.movimenti() richieda anche essa due parametri, oltretutto inserendoli non risolvo il problema ... anzi ne da degli altri
 
Ultima modifica da un moderatore:

Andretti60

Utente Èlite
3,418
2,294
Hardware Utente
Guarda la pagine del manuale del metodo onscreenclick() : il primo parametro deve essere una funzione con due parametri. Non siamo noi a deciderlo :) bensi' la libreria Turtle :)
Inoltre la tua funzione get_coordinate(x_cor,y_cor) NON ritorna nessun valore, ecco perche' non puoi usarla in goto() che richiede due parametri.
 

Cotrox

Nuovo Utente
Dunque se ho capito bene in get_coordinate dovrei aggiungere return x_cor, y_cor?

Il nuovo codice è il seguente, ma ancora niente...

Codice:
import turtle as t

x_pensize = 4
x_bgcolor = '#256712'
x_pencolor = '#fff'
cordinate_base = (0,0)
x_cor = 0
y_cor = 0

def t_caratteristiche():
    t.bgcolor(x_bgcolor)
    t.color(x_pencolor)
    t.speed(999)
    t.pensize(x_pensize)
    t.right(90)
    t.up()
   
t_caratteristiche()
   
def t_movimenti(x_cor, y_cor):
    t.goto(get_coordinate)
    t.down()
    t.ht()
   
    t.onrelease(rilascio_penna)

def get_coordinate(x_cor,y_cor):
    x_cor = t.onscreenclick.position()
    y_cor = t.onscreenclick.position()

    return x_cor, y_cor

def rilascio_penna():
    t.st()
    t.up()
    t.goto(cordinate_base)
   
t.onscreenclick(t_movimenti, btn=1, add=None)

t.done()
 
Ultima modifica:

Cotrox

Nuovo Utente
Ho cambiato totalmente progetto, e sto cercando di fare un lavoro diverso lavorando con tkinter e pygame

Il mio intento è quello di creare un riquadro contenente un file audio eseguibile al click su un bottone (possibilmente icona immagine) che indichi 'play' che al click sia sostituito dall'icona che indichi 'pause' e dentro il quale sia possibile posizionarvi un testo (titolo e descrizione).

Ora... ho provato a lavorarci su e sono riuscito ad arrivare a questo:

Eseguendo il programma viene visualizzato il tasto play che al click fa partire l'audio e cliccandolo due volte lo fa ricominciare da capo.
Il bottone separato e posizionato alla sua sinistra serve per la pausa. Insomma le funzioni di pygame ho capito come funzionano ora il problema è:

- come faccio a creare il box che contenga titolo, descrizione, piccola immagine, bottoni start, play ( con icona e non testo) e possibilmente volume?

Ma sopratutto:

- L'alternarsi della 'visibilità' del bottone play e di quello pause la dovrei legare ad una variabile i = 0 dando un incremento ad ogni click ma non capisco come fare con tkinter.
cioè so che devo fare qualcosa del tipo: i = 0... if i%2 == 0 ... else ... ma non credo esista la funzione onclick su tkinter

Scusate l'ignoranza ma sono alle prime armi ahah

Qualche aiuto?

Codice attuale:
Codice:
from pygame import mixer
from tkinter import *

root = Tk()

root.title("CotrAudio")
root.geometry("500x400")

root['bg'] = '#3f5577'

i = 0

def play_audio(event1):
    mixer.init()
    mixer.music.load('C:/Users/peppe/Desktop/CotrAudio//FilesAudio/kill.mp3')
    mixer.music.play()
    
def pause_audio(event2):
    mixer.music.pause()

def unpause_audio(event3):
    mixer.music.unpause()

if i%2 == 0:
    show.btn1

else:
    btn2 = Button(root, text="Pause", width='7')
    btn2.bind("<Button-1>", pause_audio)
    btn2['bg'] = '#11223d'
    btn2['fg'] = '#fff'
    btn2.pack()
    btn2.place(x=155, y=60)
    i += 1
    
btn3 = Button(root, text="Unpause", width='7')
btn3.bind("<Button-1>", unpause_audio)
btn3['bg'] = '#11223d'
btn3['fg'] = '#fff'
btn3.pack()
btn3.place(x=250, y=60)

lbl1 = Label(root, text='Inserisci qui la descrizione del suono')
lbl1['width'] = 49
lbl1['height'] = 10
lbl1['bg'] = '#11223d'
lbl1['fg'] = '#fff'
lbl1.pack()
lbl1.place(x=58, y=120)

root.mainloop()
 
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando