Seite 1 von 1

Toplevel eigene Mainloop() ?

Verfasst: Freitag 22. Mai 2020, 09:08
von Fladdermus
Hallo zusammen,

auf folgende Frage habe ich trotz langer Suche keine Antwort gefunden.
Ist es nötig, wie in folgendem Beispiel von ( https://www.javatpoint.com/python-tkinter-toplevel )
für ein Toplevel-Fenster eine eigene mainloop zu erstellen ?
Oder ist die mainloop() auch für alle events im Toplevel-Fenster zuständig?
Die meisten Beispiele, die ich gefunden habe, machen das nicht...

.......................................................................................................
from tkinter import *

root = Tk()

root.geometry("200x200")

def open():
top = Toplevel(root)
top.mainloop()

btn = Button(root, text = "open", command = open)

btn.place(x=75,y=50)

root.mainloop()
............................................................................................................

Würde mich über eine Erläuterung freuen.
Gruß
Fladdermus

Re: Toplevel eigene Mainloop() ?

Verfasst: Freitag 22. Mai 2020, 09:13
von Sirius3
Ja, es gibt nur ein mainloop im gesamten Programm. *-Importe sind schlecht. Man mischt keine Funktionsdefinitionen in ausführbaren Code, Keine Abkürzungen verwenden und kein place.

Code: Alles auswählen

from functools import partial
import tkinter as tk

def open_window(root):
    top = tk.Toplevel(root)

def main():
    root = tk.Tk()
    tk.Button(root, text="open", command=partial(open_window, root)).pack()
    root.mainloop()

if __name__ == '__main__':
    main()

Re: Toplevel eigene Mainloop() ?

Verfasst: Freitag 22. Mai 2020, 09:59
von Fladdermus
Hallo Sirius3,
danke für die superschnelle Antwort.
Sie wirft bei mir Anfänger allerdings auch neue Fragen auf...

Warum ist * - import nicht gut ?
Lese ich ständig in im Internet veröffentlichten Beispielen.

Und was ist gegn place() einzuwenden?
Der Gui-Designer Page arbeitet auch mit place() und relativen Koordinaten.
Pack() und Grid() scheinen mir mehr "Glücksache" zu sein...

Re: Toplevel eigene Mainloop() ?

Verfasst: Freitag 22. Mai 2020, 10:12
von __deets__
Anders herum wird ein Schuh draus. Mit Place gebaut auf einem anderen Rechner sieht wegen anderen Schriftgrössen und DPI vermurkst aus. Pack und grid passen sich an.

Und im Internet steht halt viel scheiss. Sternchenimporte ballern dir den Namensraum mit unbekannten Namen zu. Du verlierst den Überblick was woher kommt, und riskierst Namenskollisionen. Bei tkinter sind es etwa 300 Namen. Weißt du welche? Und welche du darum nicht benutzen darfst?

Re: Toplevel eigene Mainloop() ?

Verfasst: Freitag 22. Mai 2020, 21:51
von Fladdermus
Danke für die Hinweise.
Es gibt viel, was ich noch lernen sollte.
;-))