Guten Tag!
Ich bin noch recht neu hier und habe auch noch nicht so viel Ahnung vom Programmieren. Ich bin gerade dabei, ein Programm zur Verwaltung von Vereinsmitgliedern und Vereinsinternen Dingen.
Dazu gehören auch feste Prüfungsprogramme, die ich gerne in Textdateien schreiben möchte.
Nun habe ich mir gedacht, ich möchte ein bestimmtes Prüfungsprogramm, also den Inhalt einer einzigen ganz bestimmten Textdatei, durch einen mit einem Command verbundenen Button in einem Label oder Textfeld neben dem Knopf ausgeben.
Ich habe allerdings absolut keinen Plan, wie das funktionieren kann und finde auch im Internet irgendwie nicht die passende Lösung zu meinem Problem.
Ich hoffe, jemand von euch kann mir helfen
Gruß
Asteria
Bereits vorhandene Textdateien in einem Label Widget anzeigen
- __blackjack__
- User
- Beiträge: 13533
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Asteria: Was genau ist denn das Problem? Man erstellt das Fenster, den Knopf, das Label, und was man sonst noch so braucht, und wenn der Knopf gedrückt wird, muss der Dateiinhalt gelesen werden und als Text auf dem Label gesetzt werden.
Nicht so viel Ahnung vom Programmieren und GUI-Programme ist immer so eine Sache, weil man für jede nicht-triviale GUI objektorientierte Programmierung (OOP) braucht, also eigene Klassen schreiben können muss. Das ist eher gegen Ende von Anfängertutorials Thema. Die Grundlagen von Funktionen und dann Klassen und Methoden sollte man am besten vor der GUI-Programmierung drauf haben, denn bei der GUI kommt dann noch ereignisbasierte Programmierung dazu, und das ist alles auf einmal schon ein ziemlicher Brocken für viele.
Nicht so viel Ahnung vom Programmieren und GUI-Programme ist immer so eine Sache, weil man für jede nicht-triviale GUI objektorientierte Programmierung (OOP) braucht, also eigene Klassen schreiben können muss. Das ist eher gegen Ende von Anfängertutorials Thema. Die Grundlagen von Funktionen und dann Klassen und Methoden sollte man am besten vor der GUI-Programmierung drauf haben, denn bei der GUI kommt dann noch ereignisbasierte Programmierung dazu, und das ist alles auf einmal schon ein ziemlicher Brocken für viele.
Code: Alles auswählen
- (void)countSheep {
unsigned int sheep = 0;
while ( ! [self isAsleep]) { ++sheep; }
}
Danke erstmal, für deine Antwort.__blackjack__ hat geschrieben: ↑Donnerstag 23. Juni 2022, 14:57 @Asteria: Was genau ist denn das Problem? Man erstellt das Fenster, den Knopf, das Label, und was man sonst noch so braucht, und wenn der Knopf gedrückt wird, muss der Dateiinhalt gelesen werden und als Text auf dem Label gesetzt werden.
Nicht so viel Ahnung vom Programmieren und GUI-Programme ist immer so eine Sache, weil man für jede nicht-triviale GUI objektorientierte Programmierung (OOP) braucht, also eigene Klassen schreiben können muss. Das ist eher gegen Ende von Anfängertutorials Thema. Die Grundlagen von Funktionen und dann Klassen und Methoden sollte man am besten vor der GUI-Programmierung drauf haben, denn bei der GUI kommt dann noch ereignisbasierte Programmierung dazu, und das ist alles auf einmal schon ein ziemlicher Brocken für viele.
Mir ist bewusst, dass es eher ein Problem darstellt, direkt mit etwas so schwierigem anzufangen, trotzdem möchte ich das Programm aber gerne komplettieren und nutzbar machen.
Fenster, Label und Knopf bauen funktioniert super, hab ich auch schon oft in dem Programm getan. Was ich allerdings nicht hinkriege, ist, die Date auszulesen und den Inhalt dann im Label anzeigen zu lassen.
Könntest du, oder jemand anderes, ein kurzes Beispiel schreiben und ein paar Worte zu sagen?
Gruß
Asteria
With great Power comes great Responsibility.
Klar, hier ist der Code:
Code: Alles auswählen
label['text'] = special_file_path.read_text()
oder konventionell:
Gruss Peter
Code: Alles auswählen
import tkinter as tk
from pathlib import Path
class Gui():
def __init__(self, datei_name):
self.datei_name = datei_name
self.label = tk.Label(root, width=20)
self.label.pack(pady=5)
tk.Button(root, text='Anzeigen', command=self.anzeige, bg='lightgreen',
width=20).pack(pady=5)
def anzeige(self):
zu_zeigender_text = lese_datei(self.datei_name)
self.label.config(text=zu_zeigender_text)
def lese_datei(datei_name):
with open(datei_name, 'r') as mein_file:
lese_text = mein_file.read()
return lese_text
def schreibe_datei(datei_name): # Damit's auch was zum lesen gibt
mein_text = 5 * 'Das ist ein Beispiel\n'
with open(datei_name, 'w') as mein_file:
schreibe = mein_file.write(mein_text)
if __name__ == '__main__':
datei_name = Path('mein_text_tile.txt')
schreibe_datei(datei_name)
root = tk.Tk()
Gui(datei_name)
root.mainloop()
- __blackjack__
- User
- Beiträge: 13533
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@peterpy: Man benutzt keine globalen Variablen. Das Hauptprogramm gehört in eine Funktion. Dann kann so etwas gar nicht erst passieren.
`Path` wird hier nicht mehr benutzt.
Man muss nicht jedes kleine Zwischenergebnis an einen Namen binden.
`mein_*` und `meine_*` sind als Vorsilben genau so sinnfrei wie `my_*`. Wessen sonst?
Mal abgesehen vom `mein_`, warum `mein_file` und nicht `meine_datei`? Denglish ist doof.
Beim Schreiben der Datei, was denkst Du was an den Namen `schreibe` gebunden wird? Der passt da nicht zu, und verwendet wird das dann auch nirgends.
`lese_text` ist ein schlechter Name für einen Text. Das klingt eher nach einem Funktions oder Methodennamen.
Bei Textdateien sollte man explizit die Kodierung angeben.
Zwischenstand:
`Path` wird hier nicht mehr benutzt.
Man muss nicht jedes kleine Zwischenergebnis an einen Namen binden.
`mein_*` und `meine_*` sind als Vorsilben genau so sinnfrei wie `my_*`. Wessen sonst?
Mal abgesehen vom `mein_`, warum `mein_file` und nicht `meine_datei`? Denglish ist doof.
Beim Schreiben der Datei, was denkst Du was an den Namen `schreibe` gebunden wird? Der passt da nicht zu, und verwendet wird das dann auch nirgends.
`lese_text` ist ein schlechter Name für einen Text. Das klingt eher nach einem Funktions oder Methodennamen.
Bei Textdateien sollte man explizit die Kodierung angeben.
Zwischenstand:
Code: Alles auswählen
#!/usr/bin/env python3
import tkinter as tk
ENCODING = "ascii"
def schreibe_datei(dateiname): # Damit's auch was zum lesen gibt
with open(dateiname, "w", encoding=ENCODING) as datei:
datei.write(5 * "Das ist ein Beispiel\n")
def lese_datei(dateiname):
with open(dateiname, "r", encoding=ENCODING) as datei:
return datei.read()
class Gui:
def __init__(self, container_widget, dateiname):
self.dateiname = dateiname
self.label = tk.Label(container_widget, width=20)
self.label.pack(pady=5)
tk.Button(
container_widget,
text="Anzeigen",
command=self.anzeigen,
bg="lightgreen",
width=20,
).pack(pady=5)
def anzeigen(self):
self.label.config(text=lese_datei(self.dateiname))
def main():
dateiname = "test.txt"
schreibe_datei(dateiname)
root = tk.Tk()
Gui(root, dateiname)
root.mainloop()
if __name__ == "__main__":
main()
Code: Alles auswählen
- (void)countSheep {
unsigned int sheep = 0;
while ( ! [self isAsleep]) { ++sheep; }
}
Hallo,
wobei es mit 'pathlib' doch wesentlich übersichtlicher wäre oder spricht etwas dagegen?
Grüße
Dennis
wobei es mit 'pathlib' doch wesentlich übersichtlicher wäre oder spricht etwas dagegen?
Code: Alles auswählen
#!/usr/bin/env python3
import tkinter as tk
from pathlib import Path
ENCODING = "ascii"
TEXT_DATEI_PFAD = Path(r"C:\irgendwo\inder\tiefe\test.txt")
class Gui:
def __init__(self, container_widget, dateiname):
self.dateiname = dateiname
self.label = tk.Label(container_widget, width=20)
self.label.pack(pady=5)
tk.Button(
container_widget,
text="Anzeigen",
command=self.anzeigen,
bg="lightgreen",
width=20,
).pack(pady=5)
def anzeigen(self):
self.label.config(text=self.dateiname.read_text(encoding=ENCODING))
def main():
dateiname = Path(TEXT_DATEI_PFAD)
dateiname.write_text(5 * "test\n", encoding=ENCODING)
root = tk.Tk()
Gui(root, dateiname)
root.mainloop()
if __name__ == "__main__":
main()
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]