Topic: [Risolto] Problemi chiusura frame  (Letto 246 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline az610

  • python unicellularis
  • *
  • Post: 8
  • Punti reputazione: 0
    • Mostra profilo
[Risolto] Problemi chiusura frame
« il: Dicembre 06, 2022, 19:57 »
Salve a tutti,
ho una funzione che crea un frame con un pulsante che avvia un' altra funzione che invia una mail. Al termine dell'invio vorrei che chiudesse il frame. Ho usato frame.destroy ma non funziona. Al momento ho un altro pulsante con il comando (frame.destroy) che da li funziona. Come faccio per ottenere quello che mi serve....sperando di essermi spiegato.
Grazie anticipate

P.s. si capisce che sono un neofita vero...
« Ultima modifica: Dicembre 09, 2022, 18:22 da az610 »

Offline GlennHK

  • python sapiens sapiens
  • ******
  • Post: 1.723
  • Punti reputazione: 1
    • Mostra profilo
    • La Tana di GlennHK
Re:Problemi chiusura frame
« Risposta #1 il: Dicembre 07, 2022, 15:07 »
Non abbiamo la sfera di cristallo: serve un esempio.


E possibilmente non l'intero programma: un subset che mostra il problema che hai.

Offline az610

  • python unicellularis
  • *
  • Post: 8
  • Punti reputazione: 0
    • Mostra profilo
Re:Problemi chiusura frame
« Risposta #2 il: Dicembre 07, 2022, 18:33 »
Ecco una specie di esempio, ho tolto tutto il superfluo e forse anche qualcosa di piu. Di sicuro cosi non funziona ma e solo per far capire come dovrebbe essere il codice.
Ricapitolando ecco cosa vorrei fare da un form apro/creo un frame con un bottone che invia una mail e chiude il frame creato per tornare al form principale. Non funzionando, cioe invia la mail ma non distrugge il frame ho aggiunto un altro bottone per fare questo.
sperando di essermi fatto comprendere vi ringrazio e insultatemi pure, sono qui per imparare.
grazie



import tkinter
import tkinter.ttk as ttk
import time
import smtplib
form1=tkinter.Tk()
form1.geometry("400x400")

def CreaUnFrame():
   Frame2 = ttk.Frame(form1)
   Frame2.place(relx=0.200, rely=0.136, relheight=0.411, relwidth=0.520)


   def inviamail():
      oggetto="Subject: Soggetto\n\n"
      testo="Testo msg"
     
      msg = oggetto + testo
      messaggio=msg.encode('utf-8')

      email = smtplib.SMTP("smtp.gmail.com", 587)

      email.ehlo()

      email.starttls()

      email.login("pippo@gmail.com", "password")

      email.sendmail("pippo@gmail.com","pippo@gmail.com", messaggio)

      email.quit()
   
      Frame2.destroy
 
   
     
   
   ButtonInvia = tkinter.Button(Frame2)
   ButtonInvia.place(relx=0.2, rely=0.703, height=33, width=75)
   ButtonInvia.configure(text='''Invia''')
   
   ButtonInvia.configure(command=inviamail)
   
   
   Button2 = tkinter.Button(Frame2)
   Button2.place(relx=0.626, rely=0.703, height=33, width=75)
   
   Button2.configure(text='''Esci''')
   Button2.configure(command=Frame2.destroy)
   


Button1 = tkinter.Button(Frame2)
Button1.place(relx=0.626, rely=0.703, height=33, width=75)

Button1.configure(text='''invia mail''')
Button1.configure(command=CreaUnFrame)



form1.mainloop()

Offline nuzzopippo

  • python sapiens
  • *****
  • Post: 677
  • Punti reputazione: 0
    • Mostra profilo
Re:Problemi chiusura frame
« Risposta #3 il: Dicembre 08, 2022, 16:52 »
Questo dovrebbe farlo
import tkinter
import tkinter.ttk as ttk
from tkinter import messagebox as msgb
import time
import smtplib

form1=tkinter.Tk()
form1.geometry("400x400")

def CreaUnFrame():
  Frame2 = ttk.Frame(form1)
  Frame2.place(relx=0.200, rely=0.136, relheight=0.411, relwidth=0.520)
  def inviamail():
    oggetto="Subject: Soggetto\n\n"
    testo="Testo msg"
    msg = oggetto + testo
    messaggio=msg.encode('utf-8')
    try:
      email = smtplib.SMTP("smtp.gmail.com", 587)
      email.ehlo()
      email.starttls()
      email.login("pippo@gmail.com", "password")
      email.sendmail("pippo@gmail.com","pippo@gmail.com", messaggio)
      email.quit()
    except Exception as e:
      msg = repr(e)
      msgb.showerror('Errore', msg)
    Frame2.destroy()

  ButtonInvia = tkinter.Button(Frame2)
  ButtonInvia.place(relx=0.2, rely=0.703, height=33, width=75)
  ButtonInvia.configure(text='''Invia''')
  ButtonInvia.configure(command=inviamail)
  Button2 = tkinter.Button(Frame2)
  Button2.place(relx=0.626, rely=0.703, height=33, width=75)
  Button2.configure(text='''Esci''')
  Button2.configure(command=Frame2.destroy)

Button1 = tkinter.Button(form1)
Button1.place(relx=0.626, rely=0.703, height=33, width=75)
Button1.configure(text='''invia mail''')
Button1.configure(command=CreaUnFrame)

form1.mainloop()

 ma ...
« Ultima modifica: Dicembre 08, 2022, 20:43 da nuzzopippo »

Offline az610

  • python unicellularis
  • *
  • Post: 8
  • Punti reputazione: 0
    • Mostra profilo
Re:Problemi chiusura frame
« Risposta #4 il: Dicembre 08, 2022, 18:07 »
prima di tutto grazie per la risposta ma purtroppo non funziona.
Ho notato che se uso
Button2.configure(command=Frame2.destroy)
funziona, ma se uso
def chiudi():
      frame2.destroy
Button2.configure(command=chiudi)
NON funziona, in poche parole non funziona da nessun altra parte del codice che non sia command =Frame2.destroy

Aiutatemi voi.

Offline nuzzopippo

  • python sapiens
  • *****
  • Post: 677
  • Punti reputazione: 0
    • Mostra profilo
Re:Problemi chiusura frame
« Risposta #5 il: Dicembre 08, 2022, 19:40 »
prima di tutto grazie per la risposta ma purtroppo non funziona.
Testato, certo solo con il caso di eccezione per utenza sconosciuta a google, prima di postarlo, funziona, Frame2 sparisce assieme ai due bottoni ... Certamente, poi, se i processi di invio della mail non sono veloci a sufficienza non é che sia "certo" quello che può succedere, potrebbe volerci implementato un pattern adeguato

Offline az610

  • python unicellularis
  • *
  • Post: 8
  • Punti reputazione: 0
    • Mostra profilo
Re:Problemi chiusura frame
« Risposta #6 il: Dicembre 08, 2022, 20:00 »
prima di tutto grazie per la risposta ma purtroppo non funziona.
Testato, certo solo con il caso di eccezione per utenza sconosciuta a google, prima di postarlo, funziona, Frame2 sparisce assieme ai due bottoni ... Certamente, poi, se i processi di invio della mail non sono veloci a sufficienza non é che sia "certo" quello che può succedere, potrebbe volerci implementato un pattern adeguato

Forse non mi sono spiegato, vorrei che il frame si chiudesse in ogni caso, non in caso di errore o invio corretto.
I tempi di invio non sono eccezionali infatti il bottone resta come "premuto" per un secondo forse piu.
Inoltre come detto ho notato il problema che ho scritto nel post precedente cioe che il comando destroy non funziona da nessun altra parte del codice se non abbinato a command=
Vi chiedo scusa ma sono veramente alle prima armi con python
ancora grazie per la pazienza.

Offline nuzzopippo

  • python sapiens
  • *****
  • Post: 677
  • Punti reputazione: 0
    • Mostra profilo
Re:Problemi chiusura frame
« Risposta #7 il: Dicembre 08, 2022, 20:43 »
Funziona ... Solo che riguardando il codice mi accorgo di aver copiato male il codice funzionale, Chie venia, correggerò il codice nel precedente post dopo aver inviato questo.
In ogni caso, la mancata distruzione di Frame2 è dovuta al fatto che "destroy" non è una proprietà di tkinter.Button, bensì un metodo, mancano pe parentesi nella istruzione
Frame2.destroy

Tale indicazione )delle parentesi) non è necessaria indicandola nel command perché li si indica solo il nome della funzione da utilizzarsi per il callback

Offline GlennHK

  • python sapiens sapiens
  • ******
  • Post: 1.723
  • Punti reputazione: 1
    • Mostra profilo
    • La Tana di GlennHK
Re:Problemi chiusura frame
« Risposta #8 il: Dicembre 09, 2022, 00:04 »
Traduzione, non conosci come funzionano le invocazioni.

def foo():
    return 42

# cosa stampa questo?
print(foo())

# e questo?
print(foo)

Offline az610

  • python unicellularis
  • *
  • Post: 8
  • Punti reputazione: 0
    • Mostra profilo
Re:Problemi chiusura frame
« Risposta #9 il: Dicembre 09, 2022, 18:22 »
Esatto, mancavano le parentesi, come detto sono alle prime armi con python e alcune "sfumature" mi sono del tutto sconosciute. Venendo dal vb e vb net e non avendo piu programmato per oltre quindici anni trovo grossi problemi.

Grazie veramente per l'aiuto.

Offline GlennHK

  • python sapiens sapiens
  • ******
  • Post: 1.723
  • Punti reputazione: 1
    • Mostra profilo
    • La Tana di GlennHK
Re:[Risolto] Problemi chiusura frame
« Risposta #10 il: Dicembre 10, 2022, 12:01 »
Ma hai capito il perché o ti sei limitato a "mancavano le parentesi"?


Da quel che ricordo anche in vb le funzioni si invocano con le parentesi, quindi non mi sembra un problema di "essere alle prime armi con python".