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 ?
Neustart einer GUI ?
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.
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.
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.
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()
- __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.
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