Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Post - alealex

Pagine: [1]
1
Base / Re:opinione su procedura popolamento entry
« il: Dicembre 05, 2018, 23:57 »
Scrivo la struttura "modificata" dopo i vostri consigli, solo per concetto (senza codice)

(conver è il nome del programma, conversione)


class ConverUI(Frame):
  # classe interfaccia grafica
  def __init__(self, master=None):
    Frame.__init__(self, master)
    # costruzione interfaccia grafica
    .....
    # Istanza classe controller
    self.datiCtrl = ConverCtrl()

    # richiama i dati di default
    self.datiIntestazione
    .....
  def datiIntestazione(self):
    # richiama i dati di default dal metodo nsDati della classe controller
    dati = self.datiCtrl.datiDefault()
    # aggiorna widget
    self.updateWidget(dati)

 def updateWidget(self, dati):
    dataEntry = [self.nomeEntry,self.cfEntry,self.piEntry,self.capEntry,self.cittaEntry,
                 self.provEntry,self.indirizzoEntry,self.numCivicoEntry,self.datiDichEntry,
                 self.cfDichEntry,self.caDichEntry]
    for n, entry in enumerate(dataEntry):
        if entry:
          entry.insert(0, dati[n])

class ConverCtrl:
  # classe controller -> oggetto intermedio
  def init(self):
   ....

  def datiDefault(self):
    #richiama i dati di default dalla classe database e li memorizza in una lista ordinata per i widget della view
    return dati
  ...


E' migliorato un pochino stilisticamente?

2
Base / Re:opinione su procedura popolamento entry
« il: Dicembre 04, 2018, 22:21 »
Grazie a entrambi per le risposte, ne farò tesoro sicuramente. Immaginavo (ho "visto" stampando il contenuto) però grazie a voi ho avuto la conferma che fosse solo un riferimento all'oggetto e non l'oggetto stesso.

Per la programmazione a oggetti diciamo che ne ho sentito parlare  :D

Il discorso del "miscuglio" tra database e gui è per via della non editabilità. La funzione scritta nel post scrive solo i dati nelle Entry, all'avvio, nessun evento. L'utente non può in nessun modo editare nessun dato (ho usato Entry anzichè Label per dare la possibilità di copiare il dato in altri punti esterni alla gui) può solo selezionare quali fatture convertire scegliendole da una Treeview (ttk) quindi non dovendo preoccuparmi di nulla, ho "mischiato" le cose. Leggo->scrivo->aspetto selezione e conferma.
Il driver del database.... non è un driver: legge da un file di testo, per questo non ho nessun aiuto in tal senso (sono i famosi gestionali fatti a foglio di calcolo...)


3
Base / opinione su procedura popolamento entry
« il: Dicembre 04, 2018, 14:41 »
Buongiorno, colgo l'occasione con questo post per presentarmi:  sono un "lettore" da diverso tempo e sono un appassionato di Python da 10 anni ormai. Sto realizzando la conversione per la fatturazione elettronica da un gestionale e mi sono affidato a Python + Tkinter.

Scrivo più che una domanda, una richiesta di conferma che la logica usata sia corretta...

Ovvero, il concetto di popolare Entry in questo modo, cioè aggiungere in una lista
tutte le istanze delle caselle di testo (Entry Tkinter) e caricarle con un ciclo
è corretto secondo voi? Cioè non occupa troppa memoria mettere in una lista le istanze?

scrivo un estratto del codice:

  
import types
  ....
  def aggiungiDati(self):

    # nsDati è una lista definita nelle altre funzioni della classe contenente dati
    nsDati = self.nsDati
   
    # dataEntry è una lista contenente le caselle di testo (definite in altre funzioni della classe)
    # l'elemento vuoto è per saltare un campo nel database in modo da far corrispondere
    # numero del campo con numero della casella di testo ("trucco" realizzato per comodità
    # che comunque NON riguarda la domanda)
    dataEntry = [self.nomeEntry,'',self.cfEntry,self.piEntry,self.capEntry,self.cittaEntry,
                 self.provEntry,self.indirizzoEntry,self.numCivicoEntry,self.datiDichEntry,
                 self.cfDichEntry,self.caDichEntry]

    for x in enumerate(dataEntry):
      if isinstance(x[1], types.InstanceType):
        x[1].insert(0, nsDati[x[0])     


Chiedo perchè inizialmente ho perso tempo per trovare il modo di utilizzare i nomi delle
istanze avendo paura di usare troppa memoria e caricarle come stringhe nella lista (vedi codice a fine post) però poi richiamandole ovviamente non essendo istanze non si poteva "trasformarle" (non esiste un modo, vero?)

Grazie per la vostra opinione

di seguito Il concetto a cui ho lavorato all'inizio.

#Per capirci era: creo una lista con tutte stringhe
    dataEntry = ['self.nomeEntry','','self.cfEntry','self.piEntry','self.capEntry','self.cittaEntry',
                 'self.provEntry','self.indirizzoEntry','self.numCivicoEntry','self.datiDichEntry',
                 'self.cfDichEntry','self.caDichEntry']                 
# e richiamo la stringa dalla lista spacciandola per istanza (non ho trovato però la funzione che lo fa)
   # dataEntry[1].insert(...) --> sarebbe self.cfEntry.insert ma self.cfEntry in questo caso è una stringa

Pagine: [1]