Neustart einer GUI ?

Fragen zu Tkinter.
Antworten
Andrey35
User
Beiträge: 16
Registriert: Donnerstag 8. Oktober 2020, 23:00

Hallo zusammen,

ich bin ein ziemlicher Anfänger in Python ...

Ich baue gerade einer GUI, die Inhalte aus einer CSV-Datei anzeigt.

In dieser GUI habe ich eine Funktion eingebaut, wo ich neue Sachen, in einem neuen Fenster in diese CSV-Datei reinschreibe.


Jetzt möchte ich, dass das erste Fenster sich automatisch "updatet/neustartet" und das der neue Inhalt angezeigt wird.

Kann mir da einer helfen ? :geek:
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Das kann man nicht pauschal beantworten.
Wird das in einem Textfeld dargestellt? Dann musst du entsprechend den Inhalt des Textfeldes neu setzen.

Zeig doch mal, was du bisher machst.
Und zwar in Form von Code zwischen "Code-Tags". Die erscheinen automatisch, wenn du den </> Button im "Volltändigen Editor & Vorschau" anklickst. Dazwischen gehört dein Code.
Andrey35
User
Beiträge: 16
Registriert: Donnerstag 8. Oktober 2020, 23:00

Hey

Nein Textfelder weiß ich, wie man leert.
In meinem Fall würde am liebsten das Fenster, welches ich erstelle einmal neu starten...
Oder wenn es geht die Erstellung der Checkbuttons, weil im Prinzip ich nur diese erweitere

Hier wäre mein Code für mein Hauptfenster.

Code: Alles auswählen

root = Tk()

root.title("Admin")

# Text erstellen in der GUI

ID = Label(text="Karten-ID*:  ")
Matrikelnummer = Label(text="Matrikelnummer*: ")
Vorname = Label(text="Vorname*:  ")
Nachname = Label(text="Nachname*: ")
Freigabestufe = Label(text="Freigabestufe*:  ")
Projektgruppe = Label(text="Projektgruppe*: ")
Email = Label(text=" E-Mail: ")
Leerfeld = Label(text="   ")
Leerfeld2 = Label(text="   ")
Leerfeld3 = Label(text="   ")
Leerfeld4 = Label(text="   ")
Leerfeld5 = Label(text="   ")
Leerfeld6 = Label(text="   ")

# Dropdown für Freigabestufe


clicked = IntVar()
clicked.set(1)
drop = OptionMenu(root, clicked, 1, 2, 3).grid(row=12, column=2)
Freigabestufe_Eingabe = clicked

# Auf Bildschirm anzeigen

ID.grid(row=0, column=1)
Leerfeld.grid(row=1, column=1)
Matrikelnummer.grid(row=2, column=1)
Leerfeld2.grid(row=3, column=1)
Vorname.grid(row=4, column=1)
Leerfeld3.grid(row=5, column=1)
Nachname.grid(row=6, column=1)
Leerfeld4.grid(row=7, column=1)
Freigabestufe.grid(row=12, column=1)
Leerfeld5.grid(row=9, column=1)
Projektgruppe.grid(row=10, column=1)
Leerfeld6.grid(row=11, column=1)
Email.grid(row=8, column=1)

# Eingabefeld erstellen
ID_Eingabe = Entry()
ID_Eingabe.grid(row=0, column=2)
Matrikelnummer_Eingabe = Entry()
Matrikelnummer_Eingabe.grid(row=2, column=2)
VorName_Eingabe = Entry()
VorName_Eingabe.grid(row=4, column=2)
NachName_Eingabe = Entry()
NachName_Eingabe.grid(row=6, column=2)
Projektgruppe_Eingabe = Entry()
Projektgruppe_Eingabe.grid(row=10, column=2)
Email_Eingabe = Entry()
Email_Eingabe.grid(row=8, column=2)

#Am besten diesen Teil hier "restarten"

frame = pd.read_sql("SELECT * FROM Benutzer", connection)
    
frame.to_csv("/home/pi/Downloads/Benutzer.csv")


df = pd.read_csv("/home/pi/Downloads/Benutzer.csv",header=None)

zeilendf = 0
global spaltendf
spaltendf = df.shape[1]
global Spalten
Spalten = [7,spaltendf]

# Checkboxes einfügen
Leerfeld7 = Label(text="  ").grid(row=0, column=3)
Splus = Label(text="S+ Freigaben : ").grid(row=0, column=4)

r = 2

int_vars = list()
for i in range(7, spaltendf):
    int_var = tk.IntVar()
    tk.Checkbutton(root, text=df[i][zeilendf], variable=int_var).grid(
            row=r, column=4
        )
    int_vars.append(int_var)
    r += 1

Maschinen_Liste = list()

for w in range(7,spaltendf):
    Maschinen_Liste.append(df[w][zeilendf])
    

    
Stern = Label(text="* = Pflichtfeld").grid(row=r+1, column=1)
# Buttons einfügen
Leerfeld6 = Label(text="   ")
Leerfeld6.grid(row=r+2, column=1)
Auslesen = Button(text="ID Auslesen", command = IDAuslesen).grid(row=r+3, column=2)
Importieren = Button(text="Benutzer anlegen", command=myClick).grid(row=r+3, column=3)
Update = Button(text="Benutzer bearbeiten", command=Update).grid(row=r+3, column=4)
NeuMaschine = Button(text="Neue Maschine anlegen", command=NeueMaschine).grid(row=r+3, column=5)
Liste1 = Button(text="Ganze Liste", command=GanzeListe).grid(row=r+3, column=6)

#CSV = Button(text="CSV Datei erstellen", command = CSVDatei).grid(row=r+3, column= 0)


root.mainloop()


connection.close()
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Andrey35: Da sollte man erst einmal ganz viel überarbeiten.

Ein bisschen geraten weil die Importe ja fehlern: Sternchen-Importe sind Böse™. Da holt man sich gerade bei `tkinter` fast 200 Namen ins Modul von denen nur ein kleiner Bruchteil verwendet wird. Auch Namen die gar nicht in `tkinter` definiert werden, sondern ihrerseits von woanders importiert werden. Das macht Programme unnötig unübersichtlicher und fehleranfälliger und es besteht die Gefahr von Namenskollisionen.

Anscheiend wird `tkinter` aber auch schon richtig als `tk` importiert. Also das bitte auch konsequent nutzen.

Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. ``global`` hat in einem Programm nichts zu suchen. Daraus folgt bei jeder nicht-trivialen GUI, dass man objektorientierte Programmierung, also eigene Klassen braucht.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).

Man nummeriert keine Namen. Man will dann entweder bessere Namen oder gar keine einzelnen Namen sondern eine Datenstruktur. Oft eine Liste.

Man muss auch nicht alles an Namen binden. Insbesondere wenn der Wert *immer* `None` ist und der Name danach nirgends verwendet wird, macht das überhaupt gar keinen Sinn.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten