Toplevel eigene Mainloop() ?

Fragen zu Tkinter.
Antworten
Fladdermus
User
Beiträge: 9
Registriert: Dienstag 7. Mai 2019, 14:57

Freitag 22. Mai 2020, 09:08

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
Lernen ist wie Rudern im Fluss - wer aufhört, treibt zurück.
Sirius3
User
Beiträge: 11993
Registriert: Sonntag 21. Oktober 2012, 17:20

Freitag 22. Mai 2020, 09:13

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()
Fladdermus
User
Beiträge: 9
Registriert: Dienstag 7. Mai 2019, 14:57

Freitag 22. Mai 2020, 09:59

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...
Lernen ist wie Rudern im Fluss - wer aufhört, treibt zurück.
__deets__
User
Beiträge: 8106
Registriert: Mittwoch 14. Oktober 2015, 14:29

Freitag 22. Mai 2020, 10:12

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?
Fladdermus
User
Beiträge: 9
Registriert: Dienstag 7. Mai 2019, 14:57

Freitag 22. Mai 2020, 21:51

Danke für die Hinweise.
Es gibt viel, was ich noch lernen sollte.
;-))
Lernen ist wie Rudern im Fluss - wer aufhört, treibt zurück.
Antworten