Guten tag liebe Leute,
ich wende mich in der stunde der not an euch ^^
ich habe morgen eine abgabe eines selbsterstellten gui's
nun stehe ich aber vor einem problem
ich möchte das mein gui 1 button beinhaltet welcher durch drücke auslöst, dass ein spruch einer externen json datei (ca. 50 Sprüche)
random ausgewählt wird und im gui erscheint
aber er gibt mir immer wieder error aus
meine json:https://hastebin.com/esedowoqez.json
mein gui: https://hastebin.com/azatokareg.py
könnte mir vllt irgendwer helfen ich verzweifle noch ^^
MfG Schlitza
GUI mit tkinter und json random auswählen lassen
Moin
ggf. ist ``data[u'sprüche']`` des Rätsels Lösung
So mal auf die Schnelle ohne Button und ohne Gewähr:
ggf. ist ``data[u'sprüche']`` des Rätsels Lösung
So mal auf die Schnelle ohne Button und ohne Gewähr:
Code: Alles auswählen
# coding: utf-8
import json
import Tkinter as tk
import random
class MyWindow(tk.Frame):
def __init__(self, parent):
self.parent = parent
tk.Frame.__init__(self, parent)
self.my_label = tk.Label(self)
self.my_label.grid(row=1, column=1)
def update_label(self, json_data):
self.my_label['text'] = json_data
def read_json_file(my_label):
with open('test.json') as json_data:
data = json.load(json_data)
jokes = random.choice(data[u'sprüche'])
my_label.update_label(jokes)
my_label.after(1000, read_json_file, my_label)
def main():
root = tk.Tk()
my_label = MyWindow(root)
read_json_file(my_label)
my_label.pack(side=tk.TOP)
root.mainloop()
if __name__ == '__main__':
main()
Moin,
was für einen Fehler erhältst du denn?
Zu deinem Code: Sternchen-Importe sollten nicht verwendet werden, weil man damit nicht kontrollieren kann, was für Namen man sich damit importiert und es leicht zu Namenskollisionen kommen kann. `tkinter` wird üblicherweise mit `import tkinter as tk` importiert, sodass man auf die Namen in dem Modul mit `tk.` zugreifen kann, wie man lackschuhs Beispiel sehen kann.
Klassennamen werden üblicherweise in `CamelCase` geschrieben, damit man sie von Funktions- und Variablennamen unterscheiden kann.
@lackschuh: Schlitzaaa verwendet Python 3, wodurch der `u`-Präfix keine Auswirkungen hat.
was für einen Fehler erhältst du denn?
Zu deinem Code: Sternchen-Importe sollten nicht verwendet werden, weil man damit nicht kontrollieren kann, was für Namen man sich damit importiert und es leicht zu Namenskollisionen kommen kann. `tkinter` wird üblicherweise mit `import tkinter as tk` importiert, sodass man auf die Namen in dem Modul mit `tk.` zugreifen kann, wie man lackschuhs Beispiel sehen kann.
Klassennamen werden üblicherweise in `CamelCase` geschrieben, damit man sie von Funktions- und Variablennamen unterscheiden kann.
@lackschuh: Schlitzaaa verwendet Python 3, wodurch der `u`-Präfix keine Auswirkungen hat.
@narpfel
Stimmt. Jetzt wo du es sagst
examples ist nicht definiert und ist auch falsch.
Stimmt. Jetzt wo du es sagst
examples ist nicht definiert und
Code: Alles auswählen
fenster = hauptteil()
fenster.mainloop()
-
- User
- Beiträge: 34
- Registriert: Donnerstag 11. Januar 2018, 10:47
ich möchte erwähnen, dass dies nicht der erste verusch war ich habe mit import tkinter as tk angefangen aber dann durch googeln und aufsaugen von allem möglichen angefangen komplett zu versagen und alles durcheinanderzubringennarpfel hat geschrieben:Moin,
was für einen Fehler erhältst du denn?
Zu deinem Code: Sternchen-Importe sollten nicht verwendet werden, weil man damit nicht kontrollieren kann, was für Namen man sich damit importiert und es leicht zu Namenskollisionen kommen kann. `tkinter` wird üblicherweise mit `import tkinter as tk` importiert, sodass man auf die Namen in dem Modul mit `tk.` zugreifen kann, wie man lackschuhs Beispiel sehen kann.
Klassennamen werden üblicherweise in `CamelCase` geschrieben, damit man sie von Funktions- und Variablennamen unterscheiden kann.
@lackschuh: Schlitzaaa verwendet Python 3, wodurch der `u`-Präfix keine Auswirkungen hat.
Ich danke dir für den hilfreichen Beitrag )
-
- User
- Beiträge: 34
- Registriert: Donnerstag 11. Januar 2018, 10:47
lackschuh hat geschrieben:Moin
ggf. ist ``data[u'sprüche']`` des Rätsels Lösung
So mal auf die Schnelle ohne Button und ohne Gewähr:Code: Alles auswählen
# coding: utf-8 import json import Tkinter as tk import random class MyWindow(tk.Frame): def __init__(self, parent): self.parent = parent tk.Frame.__init__(self, parent) self.my_label = tk.Label(self) self.my_label.grid(row=1, column=1) def update_label(self, json_data): self.my_label['text'] = json_data def read_json_file(my_label): with open('test.json') as json_data: data = json.load(json_data) jokes = random.choice(data[u'sprüche']) my_label.update_label(jokes) my_label.after(1000, read_json_file, my_label) def main(): root = tk.Tk() my_label = MyWindow(root) read_json_file(my_label) my_label.pack(side=tk.TOP) root.mainloop() if __name__ == '__main__': main()
ich danke dir von herzen aber du hättest das jz nicht extra schreiben müssen wollte eigentlich nur hilfe aber auch in diser form ist hilfe hilfe
und umso einfacher für mich
möchte nur niemandem umstände machen ^^
-
- User
- Beiträge: 34
- Registriert: Donnerstag 11. Januar 2018, 10:47
okey und was muss ich da jz noch abändern ? im prinzip ja root usw weil root nicht gleich fenster ist (wenn ich das auf mein voriges beziehe ?lackschuh hat geschrieben:@narpfel
Stimmt. Jetzt wo du es sagst
examples ist nicht definiert undist auch falsch.Code: Alles auswählen
fenster = hauptteil() fenster.mainloop()
und mylabel müsste dann der json datei name werden oder versteh ich was falsch ?
-
- User
- Beiträge: 34
- Registriert: Donnerstag 11. Januar 2018, 10:47
hmmm er gibt mir nen error von wegen 'MyWindow' is not defined
-
- User
- Beiträge: 34
- Registriert: Donnerstag 11. Januar 2018, 10:47
ich habe einfach den code von lackschuh genommen in original reinkopiert (extra datei) damit ich testen kann wann es funktioniert und wann nicht und ich habe bis jz nocht nix verändert und er gibt den fehler ausnarpfel hat geschrieben:Wo ist `MyWindow` denn definiert und wo wird es verwendet?
Statt eine Anleitung zu verfassen, wie man - unter Umstaenden - den Code sich selbst zusammenbasteln kann, unter Anwendung irgendwelcher Dinge, die du gemacht, aber nicht klar genug beschrieben hast - waere es da nicht viel einfacher wenn du den einfach *zeigst*? Oder veranstaltest du lieber Ratespiele fuer die naechsten 20 Posts?
Es ist immer wichtig, dass die komplette Fehlermeldung gepostet wird. Geht nicht, läuft nicht etc. hilft niemand weiter, dein Problem zu verstehen.
Das Obige mal für Python3.x lauffähig gemacht. Ich benutze selber keine GUI Rahmenwerke. Im Unterforum >Tkinter< findest du zahlreiche Informationen, wie eine GUI aufgebaut wird.
Das Obige mal für Python3.x lauffähig gemacht. Ich benutze selber keine GUI Rahmenwerke. Im Unterforum >Tkinter< findest du zahlreiche Informationen, wie eine GUI aufgebaut wird.
Code: Alles auswählen
import tkinter as tk
import json
import random
class MyWindow(tk.Frame):
def __init__(self, parent):
self.parent = parent
tk.Frame.__init__(self, parent)
self.label_text = tk.StringVar()
self.my_label = tk.Label(self, textvariable=self.label_text)
self.my_label.grid(row=1, column=1)
self.button = tk.Button(self, text="Nächster Spruch", command=self.read_json_file)
self.button.grid(row=2, column=1)
def read_json_file(self):
with open('jokes.json', encoding='utf8') as json_data:
data = json.load(json_data)
self.label_text.set(random.choice(data['sprüche']))
def main():
root = tk.Tk()
my_app = MyWindow(root)
my_app.pack(side=tk.TOP)
root.mainloop()
if __name__ == '__main__':
main()
@Schlitzaaa: Das kann eigentlich nicht sein. `MyWindow` wird in lackschuhs Code einmal verwendet, und man kann deutlich sehen, dass es vorher definiert wurde.
Ich schließe mich lackschuh und __deets__ an: Bitte zeige den Code exakt so, wie du ihn ausführst (am besten auf der Kommandozeile, IDEs können Nebenwirkungen haben, die man als Anfänger nicht immer sieht oder umgehen kann), und zeige die komplette Fehlermeldung (per Copy-Paste).
Ich schließe mich lackschuh und __deets__ an: Bitte zeige den Code exakt so, wie du ihn ausführst (am besten auf der Kommandozeile, IDEs können Nebenwirkungen haben, die man als Anfänger nicht immer sieht oder umgehen kann), und zeige die komplette Fehlermeldung (per Copy-Paste).
-
- User
- Beiträge: 34
- Registriert: Donnerstag 11. Januar 2018, 10:47
Traceback (most recent call last):__deets__ hat geschrieben:Statt eine Anleitung zu verfassen, wie man - unter Umstaenden - den Code sich selbst zusammenbasteln kann, unter Anwendung irgendwelcher Dinge, die du gemacht, aber nicht klar genug beschrieben hast - waere es da nicht viel einfacher wenn du den einfach *zeigst*? Oder veranstaltest du lieber Ratespiele fuer die naechsten 20 Posts?
File "C:/Users/Schlitza/AppData/Local/Programs/Python/Python36-32/forum orig.py", line 6, in <module>
class MyWindow(tk.Frame):
File "C:/Users/Schlitza/AppData/Local/Programs/Python/Python36-32/forum orig.py", line 32, in MyWindow
main()
File "C:/Users/Schlitza/AppData/Local/Programs/Python/Python36-32/forum orig.py", line 26, in main
my_label = MyWindow(root)
NameError: name 'MyWindow' is not defined
Hier bitteschön tut mir leid das ich nicht davon ausgegangen bin das noch jmd außer mir lackschuh und narpfel den post liest
Das ist die Fehlermeldung, aber es fehlt immer noch der Code.
Wenn du Hilfe bekommen willst, musst du die Informationen liefern, die wir brauchen, um eben das zu tun. Niemand kann deine Gedanken lesen, deinen Bildschirm sehen, deine Festplatte durchwuehlen. Das musst du uns schon darlegen. Und das gilt uebrigens auch fuer narpfel und lackschuh. Nicht nur fuer andere.
Wenn du Hilfe bekommen willst, musst du die Informationen liefern, die wir brauchen, um eben das zu tun. Niemand kann deine Gedanken lesen, deinen Bildschirm sehen, deine Festplatte durchwuehlen. Das musst du uns schon darlegen. Und das gilt uebrigens auch fuer narpfel und lackschuh. Nicht nur fuer andere.
-
- User
- Beiträge: 34
- Registriert: Donnerstag 11. Januar 2018, 10:47
hierbei bekomme ich diesen error:lackschuh hat geschrieben:Es ist immer wichtig, dass die komplette Fehlermeldung gepostet wird. Geht nicht, läuft nicht etc. hilft niemand weiter, dein Problem zu verstehen.
Das Obige mal für Python3.x lauffähig gemacht. Ich benutze selber keine GUI Rahmenwerke. Im Unterforum >Tkinter< findest du zahlreiche Informationen, wie eine GUI aufgebaut wird.
Code: Alles auswählen
import tkinter as tk import json import random class MyWindow(tk.Frame): def __init__(self, parent): self.parent = parent tk.Frame.__init__(self, parent) self.label_text = tk.StringVar() self.my_label = tk.Label(self, textvariable=self.label_text) self.my_label.grid(row=1, column=1) self.button = tk.Button(self, text="Nächster Spruch", command=self.read_json_file) self.button.grid(row=2, column=1) def read_json_file(self): with open('jokes.json', encoding='utf8') as json_data: data = json.load(json_data) self.label_text.set(random.choice(data['sprüche'])) def main(): root = tk.Tk() my_app = MyWindow(root) my_app.pack(side=tk.TOP) root.mainloop() if __name__ == '__main__': main()
Traceback (most recent call last):
File "C:/Users/Schlitza/AppData/Local/Programs/Python/Python36-32/forum py3x.py", line 30, in <module>
main()
NameError: name 'main' is not defined
-
- User
- Beiträge: 34
- Registriert: Donnerstag 11. Januar 2018, 10:47
das ist lackschuhs code für py3.x:__deets__ hat geschrieben:Das ist die Fehlermeldung, aber es fehlt immer noch der Code.
Wenn du Hilfe bekommen willst, musst du die Informationen liefern, die wir brauchen, um eben das zu tun. Niemand kann deine Gedanken lesen, deinen Bildschirm sehen, deine Festplatte durchwuehlen. Das musst du uns schon darlegen. Und das gilt uebrigens auch fuer narpfel und lackschuh. Nicht nur fuer andere.
Code: Alles auswählen
import tkinter as tk
import json
import random
class MyWindow(tk.Frame):
def __init__(self, parent):
self.parent = parent
tk.Frame.__init__(self, parent)
self.label_text = tk.StringVar()
self.my_label = tk.Label(self, textvariable=self.label_text)
self.my_label.grid(row=1, column=1)
self.button = tk.Button(self, text="Nächster Spruch", command=self.read_json_file)
self.button.grid(row=2, column=1)
def read_json_file(self):
with open('jokes.json', encoding='utf8') as json_data:
data = json.load(json_data)
self.label_text.set(random.choice(data['sprüche']))
def main():
root = tk.Tk()
my_app = MyWindow(root)
my_app.pack(side=tk.TOP)
root.mainloop()
if __name__ == '__main__':
main()
Traceback (most recent call last):
File "C:/Users/Schlitza/AppData/Local/Programs/Python/Python36-32/forum py3x.py", line 30, in <module>
main()
NameError: name 'main' is not defined
Bitte poste den Code in Codebox-Tags (Dropdown-Menü „Code auswählen“ direkt über dem Editor-Fenster), ansonsten geht die Einrückung verloren, die bei Python ein wichtiges Syntaxelement ist.
Edit: Okay, das hat sich überschritten. Zwischen dem Code, den du ausgeführt hast, und dem Code von lackschuh gibt es einen Unterschied, der diesen Fehler erzeugt.
Edit: Okay, das hat sich überschritten. Zwischen dem Code, den du ausgeführt hast, und dem Code von lackschuh gibt es einen Unterschied, der diesen Fehler erzeugt.
Zuletzt geändert von narpfel am Donnerstag 11. Januar 2018, 16:35, insgesamt 1-mal geändert.
-
- User
- Beiträge: 34
- Registriert: Donnerstag 11. Januar 2018, 10:47
grade festgestellt und erledigt tut mir leid wusste nicht, dass dies extra gemacht wirdnarpfel hat geschrieben:Bitte poste den Code in Codebox-Tags (Dropdown-Menü „Code auswählen“ direkt über dem Editor-Fenster), ansonsten geht die Einrückung verloren, die bei Python ein wichtiges Syntaxelement ist.
könnte das evlt sein das ich durch copy am anfang der zeilen blank space hatte und die entfernt habe ? habe zwar pep8 benutzt und geschaut das keine error in pep8 auftauchen