Topic: Come creare un interfaccia grafica senza alcun framework  (Letto 365 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Gianpatrizio

  • python unicellularis
  • *
  • Post: 49
  • Punti reputazione: 0
    • Mostra profilo
Buongiorno, in questi giorni volevo un po' capire come creare un'applicazione dotata di interfaccia grafica senza però necessitare di import precreati. Ora capisco bene che potrà risultare un po' lungo come procedimento perciò non vi chiedo assolutamente di postarmi il codice, ma se conoscete qualche link che mi potrebbe aiutare a capire almeno come funzionano vi sarei grato se me li likaste visto che san google stavolta non si è dimostrato utile alle le mie ricerche.
Grazie a tutti coloro si renderanno disponibili.

Dimenticavo ho già provato a vedere il sorgente della libreria tkinter
« Ultima modifica: Giugno 14, 2020, 12:02 da Gianpatrizio »

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.151
  • Punti reputazione: 9
    • Mostra profilo
definisci "interfaccia grafica"
(e anche "import precreati", che non ha senso).

Offline Gianpatrizio

  • python unicellularis
  • *
  • Post: 49
  • Punti reputazione: 0
    • Mostra profilo
Ok scusi mi spiego meglio. Con interfaccia grafica intendo una semplicissima finestra senza alcun widget all'interno. per fare un esempio in tkinter per darle un'idea più precisa sarebbe questo:

from tkinter import *

class App:
  def __init__(self, root):
    pass

if __name__ == '__main__':
  root = Tk()
  App(root)
  root.mainloop()

oppure:

from tkinter import *
root = Tk()
root.mainloop()

invece con import 'precreati' chiedo scusa per il termine ma intendevo un modulo già esistente.

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 353
  • Punti reputazione: 0
    • Mostra profilo
Ok scusi mi spiego meglio. Con interfaccia grafica intendo una semplicissima finestra senza alcun widget ...
invece con import 'precreati' chiedo scusa per il termine ma intendevo un modulo già esistente.

Ancora non chiara la "definizione", forse sarebbe meglio esporre l'idea di ciò che si vorrebbe provare a fare, allo stato propenderei a pensare che :

a) Tu intenda "come realizzare una interfaccia grafica in python utilizzando solo (ed esclusivamente) le funzioni builtin ed i tipi di variabili di base";

Oppure

b) Tu intenda "come progettare una applicazione ad interfaccia grafica da zero in python" (ovviamente utilizzando uno dei framework grafici esistenti).

È una di queste due mie ipotesi interpretative? Se "si" quale?

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.151
  • Punti reputazione: 9
    • Mostra profilo
Mah sì... non è molto chiaro lo scopo di tutto questo. Cioè, sono domande che si rispondono da sole: Python è un linguaggio Turing-completo, quindi ecco la tua risposta: la risposta è sì, è possibile farlo.

Qualche tempo fa qualcuno ha chiesto se era possibile generare numeri casuali con Python ma senza usare il modulo "random" della libreria standard. E la risposta è ovvia: il signore che ha scritto, a mano, lettera per lettera, il modulo "random" ha fatto proprio questo, no? Ha trovato il modo di generare numeri casuali in Python senza usare il modulo "random". Quindi, se vuoi fare la stessa cosa, c'è un modo semplicissimo: apri un file nuovo, e copiaci dentro lettera per lettera tutto il contenuto del modulo "random". Ecco fatto, stai generando numeri casuali senza usare "random".

E così anche nel tuo caso. Vuoi una finestra di Tkinter senza usare Tkinter? Copiati tutto il contenuto di Tkinter in un tuo modulo nuovo... ti sembra troppo? D'accordo, allora studiati riga per riga il codice sorgente di Tkinter e copiati solo le parti che ti servono. Dopo di che, dimmi esattamente quale pensi che sia il senso di questa operazione.

Poi naturalmente c'è il problema che il "codice sorgente" di Tkinter, veramente, è scritto in C... (ma anche "random" è scritto in C, d'altra parte). Python è un linguaggio di alto livello, non ha degli strumenti "già pronti" per fare qualcosa di basso livello come blittare punti sullo schermo. Cioè, non esiste una funzione predefinita "draw()" in Python e non avrebbe senso. Però, di nuovo, non c'è problema: il signore che ha fatto Tkinter in Python se la sarà pure cavata in qualche modo, no? Scrivi le primitive in C e poi collegale in Python (con Ctypes, visto che non vuoi pacchetti esterni). Tkinter fa in questo modo. Anche Pygame, per esempio, fa così: guarda, questo è il codice C che più o meno dovresti scrivere, se volessi: https://github.com/pygame/pygame/blob/master/src_c/surface.c

Poi naturalmente puoi usare dei contesti grafici che già esistono: per esempio, puoi chiedere un canvas alle primitive del tuo sistema operativo. Anche qui, ovviamente sono librerie C, ma puoi linkarle con ctypes suppongo. Oppure puoi usare un canvas html5 in un browser... Python non ha strumenti per interagire con il DOM direttamente nella sua libreria standard, ma per esempio Skulpt è una implementazione di Python fatta apposta per girare dentro un browser... ma suppongo che ci siano anche altre soluzioni.

Il punto non è tanto "se" puoi fare una cosa, ma chiarire "che cosa" e "perché" la vuoi fare.

Offline Gianpatrizio

  • python unicellularis
  • *
  • Post: 49
  • Punti reputazione: 0
    • Mostra profilo
Buongiorno, rispondo prima a nuzzopippo. Tra le due ipotesi la a è quella che rappresenta al meglioil mio problema.
Invece RicPol ha ragione, mi sono spiegato male, infatti il mio problema l'ha rappresentato bene merluzzopippo, però ora mi vorrei fermare un attimo sulla teoria anziche sul codice e la domanda teorica che gli pongo è: come potrei fare al livello teorico per creare un interfaccia grafica partendo da zero
« Ultima modifica: Giugno 14, 2020, 12:05 da Gianpatrizio »

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.151
  • Punti reputazione: 9
    • Mostra profilo
Re:Come creare un interfaccia grafica senza alcun framework
« Risposta #6 il: Giugno 14, 2020, 16:10 »
Io non credo che tu abbia capito il concetto: non è una cosa di cui si può fare il riassuntino di dieci righe.
Se vuoi, potresti per esempio leggerti la documentazione di X Window o forse meglio ancora quella di Cairo (tra l'altro Cairo è molto operabile con Python, perché esiste PyCairo... così in teoria potresti scrivere del codice Python mentre impari).
Poi, beninteso, tu non vuoi *usare* X Window e/o Cairo... tu vuoi *implementare* da zero queste cose... cosa ovviamente possibile, non dovrebbe volerci più di qualche centinaio di migliaia di righe di codice C.

Offline Gianpatrizio

  • python unicellularis
  • *
  • Post: 49
  • Punti reputazione: 0
    • Mostra profilo
Re:Come creare un interfaccia grafica senza alcun framework
« Risposta #7 il: Giugno 14, 2020, 23:24 »
Ok grazie per la risposta, andrò a leggermi la documentazione di X Window e Cairo ma nel mentre vorrei farle un'ultima domanda. Tkinter che "Implementazione" di questi o altri metodi in C usa?

Offline Gianpatrizio

  • python unicellularis
  • *
  • Post: 49
  • Punti reputazione: 0
    • Mostra profilo
Re:Come creare un interfaccia grafica senza alcun framework
« Risposta #8 il: Giugno 14, 2020, 23:27 »
Scusate mi rispongo da solo. Usa Tcl/tk o mi sbaglio?

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 353
  • Punti reputazione: 0
    • Mostra profilo
Re:Come creare un interfaccia grafica senza alcun framework
« Risposta #9 il: Giugno 15, 2020, 07:59 »
Scusate mi rispongo da solo. Usa Tcl/tk o mi sbaglio?

Tcl è un linguaggio di scripting, Tk è una estensione di detto linguaggio mirata a realizzare gui.

Che tale "insieme" sia il riferimento della libreria python tkinter è detto chiaramente nella documentazione, quindi non Ti sbagli.

Auguri per la tua pesca nel codice, hai da divertiti.

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.151
  • Punti reputazione: 9
    • Mostra profilo
Re:Come creare un interfaccia grafica senza alcun framework
« Risposta #10 il: Giugno 15, 2020, 10:39 »
Sì infatti... ma per chiarire, non è che le Tk siano implementate con Tcl, eh? Tutta la baracca è ovviamente scritta in C. Tcl è lo scripting language "user-side" per operare con le Tk. E Tkinter è il wrapper Python che ti consente di operare con le Tk da Python, senza usare Tcl.

Detto questo, la domanda resta sempre: a che scopo, tutto questo? Un lettore CD funziona grazie a principi della meccanica quantistica. Ma non è che hai bisogno di conoscere la meccanica quantistica per ascoltare un po' di musica, no?
Guarda, io ho scritto un intero libro di centinaia di pagine su wxPython, ma posso tranquillamente confessare di non sapere come funziona X Window (o le DirectX peraltro).
In genere chi si mette a studiare meccanica quantistica sa perfettamente perché lo sta facendo... e tu?

Offline Gianpatrizio

  • python unicellularis
  • *
  • Post: 49
  • Punti reputazione: 0
    • Mostra profilo
Re:Come creare un interfaccia grafica senza alcun framework
« Risposta #11 il: Giugno 15, 2020, 16:39 »
Devo essere sincero, io non so esattamente in che ginepraio mi sto infilando. Da quanto mi ha scritto (mi corregga se sbaglio) ho capito che sarebbe un po' inutile capire tcl, X Window e quant'altro nonostate esistano gia framework creati apposta per questo, infatti il mio scopo era solo informativo nonostante sia ancora nell'apprendimento di questo fantastico linguaggio

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.151
  • Punti reputazione: 9
    • Mostra profilo
Re:Come creare un interfaccia grafica senza alcun framework
« Risposta #12 il: Giugno 15, 2020, 18:09 »
Mah sai, non è che sia "inutile" (ci mancherebbe)... è la questione di "alto livello" e "basso livello". Se vuoi imparare a guidare la macchina non ti serve conoscere tutti i dettagli del funzionamento del motore. E se impari bene a guidare la macchina, allora sei un pilota e ci sono tantissime cose che puoi fare con la tua abilità. Ma questo non vuol dire che il motore sia inutile da imparare. Se impari bene che cosa è un motore, allora sei un meccanico e ci sono tantissime altre cose che puoi fare con la tua abilità. (Poi sì, certo: se impari a guidare veramente ma veramente bene, allora *poi* capisci che ti serve anche sapere qualcosa di più sul motore; ma *poi*, non subito. E quanto ne hai bisogno, allora sai già che cosa vuoi imparare).
Python è un linguaggio di alto livello con cui viene naturale fare certe cose. Con C/C++ viene più naturale fare altre cose.
Se il tuo sogno è lavorare nell'industria dei videogame e programmare motori di fisica particellare che poi finiscono in Grand Theft Auto, allora ma certamente che devi imparare tutto ciò che c'è da imparare sulle DirectX, o su Cairo etc. Ma allora il linguaggio in cui ti viene più naturale imparare e manipolare queste cose è C++, non Python. Ma allora sei messo su un'altra strada, e *sai* di essere messo su un'altra strada.

Ma a parte questo, la cosa di gran lunga più insensata e dannosa che uno può fare (in Python come in C++ come per tutte le cose) è porsi delle assurde limitazioni artificiose "per vedere che cosa succede", oppure "chissà se si può fare anche così".
Si possono generare numeri casuali senza usare "random"?
Si può fare una GUI senza usare un framework?
Si può fare un programma molto esteso senza mai usare "for"?
Si può programmare in Python usando solo il telefonino?
Si può programmare bendati a testa in giù?
Cavolo, *giuro* che sono domande che sono state fatte su questo forum. E la risposta a tutte queste domande è SI', SI PUO' FARE.
Ma perché caspita uno dovrebbe farlo?
Poi sì, certo, ci sono i code golf, e quando uno diventa mostruosamente bravo può essere stimolante sfidarsi in certi modi e si imparano delle cose nuove eccetera.
Ma appunto... prima diventa mostruosamente bravo però.

Invece il principiante, magari non ha ancora finito di imparare che cosa è una lista, e subito chiede se è possibile manipolare il garbage collector in modo da migliorare la performance del 3% quando lanci un milione di thread (la risposta è: sì, si può fare).

Ora, provo a buttare là un suggerimento piccolo piccolo.
Provate a imparare Python in modo naturale, seguendo un buon manuale passo-passo.
Se per fare una gui in Python ci sono i gui framework, provate a imparare che cosa è un gui framework, a usarne uno per dieci anni. Quando diventate bravissimi a usare un gui framework (dieci anni, non un anno di meno), allora ne riparliamo.
D'accordo?

Offline Gianpatrizio

  • python unicellularis
  • *
  • Post: 49
  • Punti reputazione: 0
    • Mostra profilo
Re:Come creare un interfaccia grafica senza alcun framework
« Risposta #13 il: Giugno 15, 2020, 20:13 »
Vi ringrazio veramente per tutti i buoni consigli dati. Rimanendo nel paragone proposto da RicPol come suggerito proverò a guidare un po' meglio prima di preoccuparmi troppo di quello che succede in un motore. Nel frattempo chiudo questo topic per riaprirlo nuovamente quando avrò delle conoscenze migliori in python.