Forum >> Principianti >> Doppia shell

Pagina: 1

Ciao a tutti,

sto scrivendo un micro gestionale in shell per la gestione di libri con db mysql





Funziona quasi tutto ma mi chiedevo una cosa.





La gestione di libri e clienti prevede, per la loro cancellazione, la preventiva visualizzazione dell'elenco corrispondente, in modo da sapere l' ID relativo e poterlo cancellare




Funziona tutto, ma ovviamente siamo in shell e lo spazio è quello che è (ho provato a mettere la shell a schermo intero ma poco cambia)

Quindi, stringendo ,la domanda è: posso aprire due shell in contemporanea? Ovviamente sì, con os.system, ma l'idea è di aprire la seconda shell per visualizzare solo l'elenco libri o clienti. L'alternativa sarebbe aprire una finestra con tkinter, ma non lo amo particolarmente




Grazie

> prevede, per la loro cancellazione, la preventiva visualizzazione dell'elenco corrispondente

Eh beh capisci però che questo è un po' inevitabile, qualsiasi sistema tu voglia utilizzare. Non è che puoi cancellare così alla cieca. Piuttosto, anziché visualizzare tutto il chilometrico elenco dei libri, scrivi una funzione di ricerca che ti restituisca solo poche voci, così l'elnco è più corto ed è più facile trovare quella che poi vuoi cancellare.

> posso aprire due shell in contemporanea? Ovviamente sì,

Esatto, ovviamente sì

> con os.system

Ecco, questo invece OVVIAMENTE NO. Una shell è un oggetto del sistema operativo, non di python. Certo che potresti usare Subprocess (e comunque NON CERTAMENTE os.system... ma me lo dite una volta per tutte DOVE trovate questa documentazione giurassica su os.system, tutti quanti? Saranno dieci anni e passa che os.system è deprecato, morto e sepolto), ma non avrebbe nessun senso. Basta che tu apra due shell contemporaneamante nel sistema operativo, entrambe che fanno girare il tuo programma indipendentemente. E' come se due utenti usassero il programma allo stesso tempo. Usi una delle shell per leggere i dati, e una per modificarli.


> L'alternativa sarebbe aprire una finestra con tkinter, ma non lo amo particolarmente


Mah, fai un po' come preferisci, ma francamente se hai scritto un programma CLI e ti trovi a rimuginare su questi problemi, allora forse tanto vale che ti decida a fare il salto e scrivere una GUI. "Non lo amo particolarmente" si dice di un fidanzato o di un cantautore: gli strumenti informatici ti *servono* o non ti *servono*. Se ti serve una GUI, usa una GUI. Se poi non vuoi tkinter, le alternative non mancano...

Grazie per la risposta.

A questo punto però, in merito a TKinter, che sto provando, mi serve una dritta




Creata la maschera principale, con tanto di login, creato il menu con le voci che mi servono, adesso sorge il problema del non sapere




Creo un menù principale e lo chiamo LIBRI, con un sottomenù chiamato NUOVO LIBRO




Come faccio a far apparire una serie di campi di testo scrivibili (che poi andranno ad essere salvati nella tabella MySQL, ma questo è un passo successivo)




Se ho capito bene devo creare delle funzioni che vengono richiamate dalle singole voci di menu, ma non riesco manco a far visualizzare un bottone




Ci sono un sacco di guide on-line, ma il problema è sapere cosa cercare




Grazie




Già che sono posto il codice




from tkinter import *
import tkinter.messagebox as tm

class LoginFrame(Frame):
    def __init__(self, master):
        super().__init__(master)

        self.label_nome_utente = Label(self, text="Nome Utente")
        self.label_password = Label(self, text="Password")
        self.entry_nome_utente = Entry(self)
        self.entry_password = Entry(self, show="*")
        self.label_nome_utente.grid(row=0, sticky=E)
        self.label_password.grid(row=1, sticky=E)
        self.entry_nome_utente.grid(row=0, column=1)
        self.entry_password.grid(row=1, column=1)
        self.logbtn = Button(self, text="Login", command=self._login_btn_clicked)
        self.logbtn.grid(columnspan=2)
        self.pack()

    def _login_btn_clicked(self):
        nome_utente = self.entry_nome_utente.get()
        password = self.entry_password.get()

        if nome_utente == "marco" and password == "password":
            tm.showinfo("Informazioni", "Benvenuto Marco")
            root.destroy()
            windows = Tk()
            windows.title("pyLibri 1.0")
            windows.geometry("960x640")
            barra_menu=Menu(windows)
            windows.config(menu=barra_menu)
            menu_libri=Menu(barra_menu)
            barra_menu.add_cascade(label="Libri",menu=menu_libri)
            menu_libri.add_command(label="Nuovo libro")
            menu_libri.add_command(label="Cerca libro")
            menu_libri.add_command(label="Cancella libro")
            menu_soci=Menu(barra_menu)
            barra_menu.add_cascade(label="Soci",menu=menu_soci)
            menu_soci.add_command(label="Nuovo socio")
            menu_soci.add_command(label="Cerca socio")
            menu_soci.add_command(label="Cancella socio")
            menu_prenotazioni = Menu(barra_menu)
            barra_menu.add_cascade(label="Prenotazioni", menu=menu_prenotazioni)
            menu_prenotazioni.add_command(label="Nuova prenotazione")
            menu_prenotazioni.add_command(label="Cerca prenotazione")
            menu_prenotazioni.add_command(label="Cancella prenotazione")
            menu_uscita = Menu(barra_menu)
            barra_menu.add_cascade(label="Uscita", menu=menu_uscita)
            menu_uscita.add_command(label="Esci", command=quit)

        else:
            tm.showerror("Errore", "Nome utente o password errata")


root = Tk()
root.title("pyLibri 1.0")
lf = LoginFrame(root)
root.mainloop()





Pagina: 1



Esegui il login per scrivere una risposta.