Seite 1 von 1

Tkinter Fenster in anderer Funktion bearbeiten

Verfasst: Mittwoch 29. April 2020, 13:05
von MiniDeveloper
Hallo zusammen!
Ich bin aktuell dabei mir ein kleines Package aufzubauen, um einfacher bzw. schneller
Fenster zu erstellen, jedoch hakt es da an einigen Stellen.
Hier erstmal der Source Code mit ein paar Comments:

Code: Alles auswählen

class Window():

    def create(Title):
        #Soll Fenster erstellen
        WindowTitle = Title
        Title = Tk()
        Title.title(WindowTitle)

    def title(Window, WindowTitle):
        #Soll den Titel des Fensters (Window) zu angegebenem Titel ändern (WindowTitle)
        Window.title(WindowTitle)

#Soll ein Fenster mit dem namen "root" erstellen
Window.create("root")
#Soll das Fenster umtiteln
Window.title("root", "Fenster")
Und hier der Error:

Code: Alles auswählen

Traceback (most recent call last):
  File "*Dateipfad", line 32, in <module>
    Window.title("root", "Fenster")
  File "*Dateipfad", line 27, in title
    Window.title(WindowTitle)
TypeError: title() takes no arguments (1 given)
Der Code ist ein kleines Stück gekürzt, davor ist aber nichts interessantes, was den Nachfolgenden Code beeinflussen könnte.
Ich habe schon echt lange nach einer Lösung gesucht, vergeblich, deswegen hoffe ich hier auf Rat.
Naja, über Antworten wäre ich echt Dankbar!
Peace ✌

Re: Tkinter Fenster in anderer Funktion bearbeiten

Verfasst: Mittwoch 29. April 2020, 13:28
von Sirius3
Klassen als einfache Namensräume zu misbrauchen ist schlecht. Schreibe eine richtige Klasse.
Bisher hast Du nur ein paar Funktionen, die Du mit Strings aufrufst.
Ein String hat zufälligerweise auch eine Methode `title`, die braucht aber kein Argument:

Code: Alles auswählen

In [1]: "root".title()
Out[1]: 'Root'

Re: Tkinter Fenster in anderer Funktion bearbeiten

Verfasst: Mittwoch 29. April 2020, 13:54
von MiniDeveloper
Hmm, verstehe ich leider nicht so richtig :/
Was heißt das konkret für meinen Code?
Wäre dir über eine Lösung sehr dankbar

Re: Tkinter Fenster in anderer Funktion bearbeiten

Verfasst: Mittwoch 29. April 2020, 14:01
von __deets__
Das sind halt keine Klassen. Sondern nur Sammlungen von Funktionen. Du solltest das Tutorial ueber Klassen und Objekte in der offiziellen Dokumentation durcharbeiten, dann wird dir das hoffentlich klar.

Und ausserdem geht das hier:

Code: Alles auswählen

"ich bin ein text".title()
Das verwirrt dich, weil du statt auf einer Window-Instanz title auf einem String aufrufst.

Re: Tkinter Fenster in anderer Funktion bearbeiten

Verfasst: Mittwoch 29. April 2020, 14:04
von __blackjack__
@MiniDeveloper: Konkret für den Code heisst das weg mit der Klasse die gar keine Klasse ist. Wobei auch die Funktionen totaler Unsinn sind. Warum sollte man eine Funktion mit einem Toplevel-Objekt und einer Zeichenkette aufrufen die dann nur eine Methode auf dem Toplevel mit dieser Zeichenkette aufruft. Das macht genau gar nichts einfacher.

Und `Title` ist ein ganz schlechter Name für ein `Tk`-Objekt. Das ist kein ”Titel” sondern ein (Haupt)Fenster. Die `create()`-Funktion sollte zudem wohl das erzeugte auch zurückgeben damit der Aufrufer danach auch etwas damit machen kann.

Edit: Konkret würde das so aussehen, wo ich aber bei beiden Funktionen wie gesagt den Sinn nicht sehe:

Code: Alles auswählen

import tkinter as tk


def set_title(window, title):
    window.title(title)


def create_main_window(title):
    window = tk.Tk()
    set_title(window, title)
    return window