Forum
>>
Programmazione Python
>>
Database
>>
Programma in Python con interfaccia locale
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da massimo94 |
2022-12-15 10:04:38 - Programma in Python con interfaccia locale
|
Buongiorno,
ho creato un codice che mischia l'interfaccia al database, però una volta partito il programma la connessione non avviene. In allegato il codice import tkinter as tk import psycopg2 # Crea la finestra principale root = tk.Tk() # Crea una connessione a Postgres conn = psycopg2.connect( host="localhost", user="postgres_user", password="postgres_password", database="postgres_database" ) # Crea un frame per i campi di login login_frame = tk.Frame(root) # Crea i campi per l'username e la password username_label = tk.Label(login_frame, text="Username:") username_entry = tk.Entry(login_frame) password_label = tk.Label(login_frame, text="Password:") password_entry = tk.Entry(login_frame, show="*") # Visualizza i campi per l'username e la password username_label.grid(row=0, column=0) username_entry.grid(row=0, column=1) password_label.grid(row=1, column=0) password_entry.grid(row=1, column=1) # Crea il pulsante di login login_button = tk.Button( login_frame, text="Login", command=lambda: login( username_entry.get(), password_entry.get() ) ) # Visualizza il pulsante di login login_button.grid(row=2, column=1) # Mostra il frame per i campi di login login_frame.pack() # Definisci la funzione di login def login(username, password): # Esegui una query per verificare se l'username e la password sono corretti with conn: cur = conn.cursor() cur.execute( "SELECT COUNT(*) FROM users WHERE username = %s AND password = %s", (username, password) ) count = cur.fetchone()0 # Se l'username e la password sono corretti, esegui un'azione di successo if count == 1: login_frame.destroy() success_label = tk.Label(root, text="Login effettuato con successo") success_label.pack() # Altrimenti, visualizza un messaggio di errore else: error_label = tk.Label(root, text="Username o password non validi") error_label.pack() # Avvia il loop dell'interfaccia grafica root.mainloop() |
|
Scritto da nuzzopippo |
2022-12-15 11:38:07 - Re: Programma in Python con interfaccia locale
|
Il problema Ti è dato, in primo luogo, dalla visibilità delle variabili, così come è strutturato il codice l'user non verrà msi loggato a PostgreSQL perché non avviene alcuna connessione, che definisci all'inizio del codice con gli equivoci parametri:
user="postgres_user", password="postgres_password", database="postgres_database"(Non ti da nessun errore sulla connessione?) Dovresti strutturarti una funzione alla quale passi i parametri di login e Ti restituisca la connessione, da invocare al login per poi proseguire con le successive operazioni. ... disgiuntamente dal problema "connessione", suggerirei di approfondire gli aspetti di "Visibilità" e "scope" delle variabili in python, oltre che strutturarlo considerando le classi, così come è il codice si presta molto poco ad applicazioni appena più che elementari. [Edit] integrato "user" nella citazione ... giacché ci sono aggiungo che i parametri di login inseriti dall'user non saranno mai visibili da "conn" tanto per questioni di visibilità quanto per questioni di posizione (si, anche la posizione del codice è significativa) --- Ultima modifica di nuzzopippo in data 2022-12-15 11:45:10 --- --- Ultima modifica di nuzzopippo in data 2022-12-15 11:45:43 --- Fatti non foste a viver come bruti... |
|
Scritto da massimo94 |
2022-12-15 11:46:10 - Re: Programma in Python con interfaccia locale
|
Risolto grazie eventualmente posso chiedere una libreria dall'aspetto piu moderno rispetto a tkinter?
|
|
Scritto da nuzzopippo |
2022-12-15 11:57:44 - Re: Programma in Python con interfaccia locale
|
Sento molto nominare le librerie QT, che però non conosco, da linuxaro quale sono preferisco librerie "libere", tipo wxPython non "nuovissime" ma più complete ed eleganti di tkinter.
La triade su (comprendente tkinter) sono i principali framework per applicazioni desktop, poi ci sono miriadi di cosette varie in giro, per lo più derivazioni da una delle tre, per scopi vari. Suggerirei una ricerca in rete per farsi le idee su cosa si voglia/occorra veramente, studiarsi una qualunque di quelle librerie è estremamente impegnativo, per ottenere discreti risultati. Fatti non foste a viver come bruti... |
|
Scritto da Gulshan Negi |
2023-04-12 10:58:53 - Re: Programma in Python con interfaccia locale
|
Hello this is Gulshan Negi
Well, in my recent search I found that the problem with your code is that the Tkinter GUI loop begins before the database connection is established. The connection must be established within the login function so that it can only be established when the login button is pressed. Thanks |
|
Scritto da nuzzopippo |
2023-04-12 19:42:09 - Re: Programma in Python con interfaccia locale
|
Not necessarily, the tkinter mainloop can be bypassed using the publisher/subscriber pattern and a messaging protocol, p.e.
I apologize for the post syntax I don't speak English Fatti non foste a viver come bruti... |
Pagina: 1
Esegui il login per scrivere una risposta.