.geometry in Tkinter

di goldman il
19 risposte

Salve, sono nuovo nel forum quindi mi scuso a priori per eventuali imprecisioni.

trovo difficoltà a gestire il comando window.geometry (arg1,arg2) in Tkinter. Se gli argomenti sono numeri va tutto bene, se gli argomenti sono parametri (interi) definiti in precedenza dà errore anche se scrivo la sintassi corretta citata nei manuali di riferimento. 

Es. window.geometry(f "{W}x{H}")

dove W ed H sono stati già definiti. Il risultato è un errore di sintassi indicato nelle seconde virgolette ("). Qualcuno sa aiutarmi? Grazie

19 Risposte

  • Nessuno spazio tre ‘f’ e le virgolette!

  • Grazie a migliorabile per la sollecita risposta ma, tolto lo spazio l'errore di sintassi continua

  • 19/02/2023 - goldman ha scritto:


    Il risultato è un errore di sintassi indicato nelle seconde virgolette (")

    Ovvero, qual è l'errore? Riporta la descrizione per intero.

  • Riporto per intero il codice di prova:

    # -*- coding: utf-8 -*-
    import Tkinter as tk

    win = tk.Tk()

    w = 600 # Width 
    h = 300 # Height

    screen_width = win.winfo_screenwidth()  # Width of the screen
    screen_height = win.winfo_screenheight() # Height of the screen

    # Calculate Starting X and Y coordinates for Window
    x = (screen_width/2) - (w/2)
    y = (screen_height/2) - (h/2)

    win.geometry (f"{w}x{h}+{x}+{y})

    win.mainloop()
    La risposta al “run” è stata: “There'is an error in your program: EOL while scanning string literal”

  • Perché hai tolto le virgolette rispetto al primo post? Normale che non funzioni

  • Mio errore di battitura nel forum. nel codice le virgolette ci sono:

    win.geometry (f"{w}x{h}+{x}+{y}")

    e l'errore comunicato è sempre quello

  • 20/02/2023 - goldman ha scritto:


    Mio errore di battitura nel forum. nel codice le virgolette ci sono:

    win.geometry (f"{w}x{h}+{x}+{y}")

    e l'errore comunicato è sempre quello

    Scusa, ma nel riportare il codice devi fare copia/incolla, quindi come potrà mai esserci un errore di battitura?
    Se stai ricopiando il codice, non va bene in quanto potresti introdurre errori non presenti nell'originale (come è accaduto), e viceversa.

    Detto questo… ok per l'errore, quindi altra domanda: su quale riga si verifica? e siamo sicuri che il resto del codice sia corretto?

    Scusa per le domande, ma qui si devono cavare fuori le informazioni minime necessarie con il cavatappi, quasi come se fosse nostro tutto l'interesse a individuare il problema nel codice.

    Un po' di buona volontà…

  • EOL è esattamente perché mancano le virgolette alla fine, così come l'errore che avevi prima era perché hai lasciato lo spazio tra f e le virgolette, come ti ha detto migliorabile. Se hai introdotto un terzo errore, forse è meglio che te la veda tu a questo punto…

  • Come ho già riportato l'errore persiste anche con tutte le virgolette e senza spazi. Riporto di nuovo il codice per completezza:

    # -*- coding: utf-8 -*-
    from Tkinter import tk

    win = tk.Tk()

    w = 600 # Width 
    h = 300 # Height

    screen_width = win.winfo_screenwidth()  # Width of the screen
    screen_height = win.winfo_screenheight() # Height of the screen

    # Calculate Starting X and Y coordinates for Window
    x = (screen_width/2) - (w/2)
    y = (screen_height/2) - (h/2)

    win.geometry (f"{w}x{h}+{x}+{y}")
    win.mainloop()

    e l'errore è : invalid statement

  • win.geometry('%dx%d+%d+%d' % (w, h, x, y))

  • 20/02/2023 - goldman ha scritto:


    Come ho già riportato l'errore persiste anche con tutte le virgolette e senza spazi. Riporto di nuovo il codice per completezza:

    […]

    e l'errore è : invalid statement

    Quindi, dici che l'errore persiste e per completezza hai riportato il codice uguale a prima (a tuo dire), ma adesso però magicamente l'errore è diverso ed è diventato “Invalid statement”. E questo senza alcuna modifica? Mi pare abbastanza strano…

    Ma allora, l'errore persiste (cioè è uguale) o è differente?
    E di nuovo ancora, come già richiesto prima, su quale riga si verifica?

  • Se non fosse strrano non avrei chiesto aiuto a questo forum.

    L'errore persiste. Ho modificato lo statement in cento modi diversi seguendo per giorni pedissequamente gli esempi che vengono dati nel web su siti di tutto rispetto. Poichè inoltre il debub degli errori di python è piuttosto primitivo mi è capitato altre volte che l'errore denunciato su di una riga si riferisse alla precedente, quindi ho commentato in questo codice tutte le righe precedenti non essenziali. Nulla da fare.

    Il debug riporta tipi di errori differenti facendo girare due volte lo stesso codice e sono io il primo a trovare strano questo risultato, come trovo strano che per parametrizzare un dato numerico su questo metodo (geometry) gli esempi riportino un notevole numero di sintassi possibili (provate tutte, nessuna funzionante). 

    Le insinuazioni  di superficialità ed il leggero sarcasmo non giovano alla soluzione del problema visto che prima di rivolgermi a questo forum di soggetti, certamente esperti , ho passato vari giorni a cercare di capire la natura dell'errore valendomi dell'esperienza maturata  di alcune decine di annii di programmazione inaltri linguaggi. 

    In ogno modo anche se non ho risolto il mio problema ringrazio tutti gli intervenuti per la loro disponibilità ed il moderatore per la pazienza. Ciao a tutti

  • Non hai detto nulla di specifico sul mio suggerimento

  • No, l'errore non persiste: hai un altro errore.  Persiste il fatto che non riesci a chiamare il metodo.

    Puoi controllare se è come dice oregon, puoi fare debug vedendo cosa ti viene come stringa generata, prima di chiamarla nel metodo; puoi postare il codice che funzionava con le literals, magari con il copia & incolla, altrimenti è inutile…

Devi accedere o registrarti per scrivere nel forum
19 risposte