Tkinter Fenster in anderer Funktion bearbeiten

Fragen zu Tkinter.
Antworten
MiniDeveloper
User
Beiträge: 25
Registriert: Sonntag 3. Juni 2018, 15:09

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 ✌
Sirius3
User
Beiträge: 18289
Registriert: Sonntag 21. Oktober 2012, 17:20

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'
MiniDeveloper
User
Beiträge: 25
Registriert: Sonntag 3. Juni 2018, 15:09

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
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
__blackjack__
User
Beiträge: 14087
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten