Seite 2 von 2

Re: GUI mit tkinter und json random auswählen lassen

Verfasst: Donnerstag 11. Januar 2018, 17:37
von narpfel
`main` ist einfach eine ganz normale Funktion. Die hätte man auch `start_program` oder `foo` nennen können, aber `main` ist der übliche Name für die Funktion, die als erstes aufgerufen wird und in der das Programm abläuft.

`if __name__ == "__main__":`ist dazu da, `main` nur dann aufzurufen, wenn die Python-Datei als Programm gestartet wird und nicht importiert. Das ist hier beschrieben.

`__init__` ist der Initialisierer der `MyWindow`-Klasse. Das ist unter anderem im Python-Tutorial beschrieben.

@lackschuh: Findest du es sinnvoll, fertige Lösungen für Hausaufgaben zu posten?

Re: GUI mit tkinter und json random auswählen lassen

Verfasst: Donnerstag 11. Januar 2018, 17:54
von Schlitzaaa
narpfel hat geschrieben:`main` ist einfach eine ganz normale Funktion. Die hätte man auch `start_program` oder `foo` nennen können, aber `main` ist der übliche Name für die Funktion, die als erstes aufgerufen wird und in der das Programm abläuft.

`if __name__ == "__main__":`ist dazu da, `main` nur dann aufzurufen, wenn die Python-Datei als Programm gestartet wird und nicht importiert. Das ist hier beschrieben.

`__init__` ist der Initialisierer der `MyWindow`-Klasse. Das ist unter anderem im Python-Tutorial beschrieben.

@lackschuh: Findest du es sinnvoll, fertige Lösungen für Hausaufgaben zu posten?
Erstmal danke für die erklärungen. :)

Zu den Hausaufgaben:
Ich kann dir hier mehrere verschiedene Versuche reinposten
weißte was ich mach einfach mal 2 rein.

Code: Alles auswählen

import tkinter
from tkinter import *
import random
import json
fenster = tkinter.Tk()
fenster.geometry("600x400")
fenster.title("Sprüche für jeden Tag")


class hauptteil():
    def Button():
        listbox.insert(END, "button pressed")

def set_text():
    text.config(text=random.choice(examples))


button = Button(fenster, text='Test', command=set_text)
button.pack()


with open('jokes.json', encoding='utf-8') as json_data:
    data = json.load(json_data)
    jokes = data['sprüche']


text = Message(fenster, width=300)
text.pack()
fenster = hauptteil()
fenster.mainloop()

Code: Alles auswählen

import tkinter as tk

top = tkinter.Tk()
from random import randint

import json

with open('jokes.json') as json_data:
    data = json.load(json_data)
    jokes = data['jokes']


counter = 0 
def counter_label(label):
  counter = 0
  def count():
    global counter
    counter += 1
    label.config(text=str(counter))
    label.after(1000, count)
  count()
 
 
root = tk.Tk()
root.title("Counting Seconds")
label = tk.Label(root, fg="dark green")
label.pack()
counter_label(label)
button = tk.Button(root, text='Stop', width=25, command=root.destroy)
button.pack()
root.mainloop()
weiter im Text.
Die Hausaufgabe war nicht gestellt von wegen ja macht ein gui mit random Sprüchen. Nein.
Es hieß programmiert ein Gui das etwas kann.
Nun hatte ich mir das mit dem Random in den kopf gesetzt und musste es einfach umsetzen.
zudem bin ich perfektionist und habe mich jz weiterbelesen was die visuelle darstellung von Guis angeht und es ein wenig aufgehübscht.
Wenn man das so sagen kann.
ich saß jz 1,5 wochen an der HA und habe es nicht hinbekommen da darf ich mir doch wohl hilfe holen oder ?

Re: GUI mit tkinter und json random auswählen lassen

Verfasst: Donnerstag 11. Januar 2018, 18:10
von narpfel
@Schlitzaaa: Natürlich kannst du hier nachfragen, wenn du Probleme hast, die du nicht alleine lösen kannst (auch bei Hausaufgaben). Dabei gilt (wie immer): Konkrete Fragen helfen dir, gute (und hilfreiche) Antworten zu bekommen.

Mein Frage war an lackschuh gerichtet, weil er dir eine fertige Lösung gegeben hat.

Re: GUI mit tkinter und json random auswählen lassen

Verfasst: Donnerstag 11. Januar 2018, 18:47
von Schlitzaaa
narpfel hat geschrieben:@Schlitzaaa: Natürlich kannst du hier nachfragen, wenn du Probleme hast, die du nicht alleine lösen kannst (auch bei Hausaufgaben). Dabei gilt (wie immer): Konkrete Fragen helfen dir, gute (und hilfreiche) Antworten zu bekommen.

Mein Frage war an lackschuh gerichtet, weil er dir eine fertige Lösung gegeben hat.
Ich weiß aber ich muss sagen dass das gut so war zumindest für mich ^^.
Zudem ist zu erwähnen das ich mich selbst darüber gewundert habe
und ich denke, dass lackschuh sich dachte das ich ewig dransitze und es nicht hinbekomme und
er hat mir deshalb die lösung geschickt

Re: GUI mit tkinter und json random auswählen lassen

Verfasst: Sonntag 14. Januar 2018, 23:19
von Schlitzaaa
wuf hat geschrieben:Hi Schlitzaaa

Hier auch noch was zum herumspielen:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import json
import random

try:
    # Tkinter for Python 2.xx
    import Tkinter as tk
except ImportError:
    # Tkinter for Python 3.xx
    import tkinter as tk

APP_TITLE = "Sprücheklopfer"
APP_XPOS = 50
APP_YPOS = 100
APP_WIDTH = 800
APP_HEIGHT = 50

        
class Application(tk.Tk):

    def __init__(self):
        tk.Tk.__init__(self)
        self.title(APP_TITLE)
    
    def build(self):
        self.protocol("WM_DELETE_WINDOW", self.close_app)
        self.geometry("+{}+{}".format(APP_XPOS, APP_YPOS))
        #self.geometry("{}x{}".format(APP_WIDTH, APP_HEIGHT))
        self.option_add("*Button.highlightThickness", 0)

        self.app_container_01 = tk.Frame(self)
        self.app_container_01.pack(fill='both', expand=True)
        
        self.my_label = tk.Label(self.app_container_01)
        self.my_label.pack(expand=True, padx=5)
    
        self.json_data = self.read_json_file()
        self.update_label(self.json_data)
         
    def read_json_file(self):
        with open('test.json') as json_data:
            data = json.load(json_data)
        return data
        
    def update_label(self, data):
        self.my_label['text'] = random.choice(self.json_data[u'sprüche'])
        self.after(1000, self.update_label, data)
        
    def close_app(self):
        # Here do something before apps shutdown
        print("Good Bye!")
        self.destroy()

        
def main():        
    app = Application()
    app.build()
    app.mainloop()

    
if __name__ == '__main__':
    main()      
 
Gruss wuf :wink:
habs zum laufen gebracht hase :D
aber auf was bezieht sich in build die self.geometry kette ?

Re: GUI mit tkinter und json random auswählen lassen

Verfasst: Montag 15. Januar 2018, 09:28
von Kniffte
@Schlitzaaa:

Code: Alles auswählen

self.geometry("+{}+{}".format(APP_XPOS, APP_YPOS))
'--> Definiert die Startposition des Applikationfensters

Code: Alles auswählen

self.geometry("{}x{}".format(APP_WIDTH, APP_HEIGHT))
'--> Definiert die Größe des Applikationfensters

Kann man auch als Einzeiler schreiben:

Code: Alles auswählen

self.geometry("{}x{}+{}+{}".format(APP_WIDTH, APP_HEIGHT, APP_XPOS, APP_YPOS))

Re: GUI mit tkinter und json random auswählen lassen

Verfasst: Montag 15. Januar 2018, 10:19
von wuf
Schlitzaaa hat geschrieben:habs zum laufen gebracht hase :D
aber auf was bezieht sich in build die self.geometry kette ?
Super!

Was die beiden Zeilen bewirken hat Kniffte schon ausführlich erklärt. Habe diese standardmässig für Versuchszwecke in meiner Testskript-Vorlage integriert. Können normalerweise aber auskommentiert bleiben. Manchmal braucht es aber beim experimentieren eine eigene Position und oder Grösse des Hauptfensters, welche einem nicht vom OS-Manager vorgeschrieben wird. Du kannst natürlich Positionierung und Grösse in einer Zeile vereinen wie Kniffte erwähnte.

Gruss wuf :wink: