Forum >> Principianti >> Python e GUI

Pagina: 1

Salve a tutti. Sono uno studente principiante-intermedio di python, tuffatomi in questo linguaggio circa 6 mesi fa. Nonostante alcune difficoltà, sfogliando i vari topic del forum, ho sentito parlare di questo libro, Learning Python (Mark Lutz), cominciando a leggerlo (attualmente alla pagina 200-)
Per ora ho le conoscenze di tutto quel che riguarda stringhe, variabili, liste, dizionari, booleani, if-else-elif, ed altri comandi minori delle categorie sys, random e time.
Ora, ho trovato in una pagina di quest'ultimo libro una bella lista di comandi "grezzi", quindi che non necessitano di import e varie -per esempio .pop, .append, .join- e fin qui ci siamo.
Tuttavia arriviamo al cuore della discussione: l'interfaccia grafica. Ho sentito parlare di un Tkinter, la GUI di python, ma al livello che vi ho appena descritto, è fattibile l'apprendimento sin da ora? Sottolineando che sono un ragazzino di 13 anni appena compiuti, chiedo un parere vostro.

Grazie mille (:




EDIT: Ah, sto pure cominciando ad imparare il terminal di linux... Qualcuno pratico nel sistema operativo mi potrebbe aiutare ad installare la versione 3.6.x dell'IDE di python? attualmente sono riuscito solo ad installare la 2.x, e non mi trovo molto bene.


--- Ultima modifica di Gian in data 2017-08-23 21:14:59 ---
quello che vuoi fare te ha dell'incredibile, quantomeno per le tue conoscenze attuali; importando il modulo tkinter e dando come comando "help(tkinter)" ti renderai conto della sua mastodontia. Per usare anche solo al minimo quei moduli ti consiglio di studiarti quantomeno ciò che riguarda le classi e per iniziarti alla creazione di GUI, per quanto possa sembrare un nulla in confronto alla tkinter, vediti la pygame.



Per quanto riguarda linux posso e non posso aiutarti, ora sto su windows ed è da tanto che non metto mano ai comandi; provato semplicemente con "sudo apt-get install python3"?
Tkinter è la più semplice e portabile tra le interfacce grafiche possibili, però richiede di aver compreso almeno a grandi linee il modello a oggetti di Python E riuscire a leggere un reference in inglese come effbot.org/tkinterbook/tkinter-index.htm#introduction o infohost.nmt.edu/tcc/help/pubs/tkinter/web/index.html.

Qualche esempio (in italiano) per partire si trova qui: www.webalice.it/srosta/tkinter000.html#top o qui:linuxdidattica.org/docs/altre_scuole/msm_p/txs_01.html.

Per l'installazione:
sudo apt-get install python3 python3-tk
Dopo di che puoi provare questo:
import tkinter
import random

#-------------------------------------------------------------------------

class Palla:

    def __init__(self, superficie):
        self.x = random.randint(20, 300)
        self.y = random.randint(20, 180)
        self.vx = random.randint(5, 12)
        self.vy = random.randint(3, 10)
        self.superficie = superficie
        self.figura = superficie.create_oval(0, 0, 0, 0, fill="green")

    def muovi(self):
        self.x = self.x + self.vx
        if self.x <= 15 or self.x > 305:  self.vx = -self.vx
        self.y = self.y + self.vy
        if self.y <= 15 or self.y > 185:  self.vy = -self.vy
        self.superficie.coords(self.figura, self.x-15, 
                               self.y-15, self.x+15, self.y+15)

#-------------------------------------------------------------------------

def muovi(finestra, lista_palle):
    finestra.after(30, muovi, finestra, lista_palle)
    for palla in lista_palle:  palla.muovi()
    
#-------------------------------------------------------------------------

def main():
    finestra = tkinter.Tk()
    superficie = tkinter.Canvas(finestra, width=320, height=200)
    superficie.pack()
    superficie.configure(bg="black")
    lista_palle = []
    for n in range(5):  lista_palle.append(Palla(superficie))
    muovi(finestra, lista_palle)
    finestra.mainloop()
    
#-------------------------------------------------------------------------

main()



--- Ultima modifica di Claudio_F in data 2017-08-28 17:36:19 ---
*** Il codice va evidenziato con il simbolo di fianco ai colori per non perdere l'indentazione ***
Allora intanto comincerò a studiarmi le classi. Dopodichè, se ho capito bene, dovrei avere una conoscenza a 360° per procedere con tkinter?


Grazie ad entrambi (:

Studiare le classi serve per avere almeno la conoscenza sintattica per leggere gli esempi. Poi l'esperienza viene col tempo e la pratica. Più che altro intendevo anche il concetto che ogni cosa assegnata ad una variabile è un riferimento ad un certo oggetto, e che ogni tipo di espressione crea nuovi oggetti. Comandi come join, append ecc sono funzionalità di questi oggetti che operano sui dati in essi contenuti. Quando si chiama una classe (del modulo tkinter) viene creato un oggetto grafico il cui riferimento si salva in una variabile. Quando si vuole usare quell'oggetto si chiamano i suoi metodi (.configure, .set ecc).

Un errore frequente e presente anche in qualche tutorial è scrivere una cosa del genere credendo di salvare nella variabile 'etic' il riferimento all'oggetto Label per poterla usare in un secondo momento ad esempio per modificarne il testo:
etic = tkinter.Label(text="ciao").pack()
...mentre si salva solo l'oggetto finale prodotto dal metodo .pack che è l'oggetto nullo None, quindi si perde la possibilità di usare l'oggetto Label chiamandolo col nome 'etic'.

Ecco è importante capire, leggendo un'espressione/istruzione da sinistra verso destra, con quale oggetto/dati si ha a che fare in ogni punto, perché queste sono tutte espressioni/istruzioni valide, ma ad 'etic' vengono assegnate cose completamente diverse:
etic = tkinter
etic = tkinter.Label
etic = tkinter.Label(text="ciao")
etic = tkinter.Label(text="ciao").pack
etic = tkinter.Label(text="ciao").pack()



--- Ultima modifica di Claudio_F in data 2017-08-29 20:37:35 ---
*** Il codice va evidenziato con il simbolo di fianco ai colori per non perdere l'indentazione ***


Pagina: 1



Esegui il login per scrivere una risposta.