Kann Theme "Breeze" nicht einbinden

Fragen zu Tkinter.
Antworten
Sempervivum
User
Beiträge: 5
Registriert: Montag 22. November 2021, 21:57

Montag 22. November 2021, 22:11

Guten Abend,
ich habe mich gerade angemeldet und bin noch ziemlich neu bei Python. Bisher habe ich alle Problem durch Nachlesen im Web lösen können aber bei diesem beiße ich mir die Zähne aus.
Ich möchte mein tkinter-GUI etwas ansprechender gestalten und habe mir dazu das Theme "Breeze" ausgesucht. Leider gelingt es mir nicht, es zum Laufen zu bringen.
Es ist dieses bei Github:
https://github.com/MaxPerl/ttk-Breeze
leider ohne Anleitung zum Installieren. Anderswo habe ich gelesen, dass es keine weiteren Dateien außer breeze.tcl braucht und dass man es so einbinden kann:

Code: Alles auswählen

    root = tk.Tk()
    # Import the tcl file with the tk.call method
    # Put here the path of your theme file
    root.tk.call(
        'source', r'breeze.tcl')
breeze.tcl liegt im selben Verzeichnis wie die anderen Dateien des Skripts. Wahrscheinlich fehlt mir da noch etwas. Muss ich noch etwas importieren?
Kann mir da jemand auf die Sprünge helfen?
Beste Grüße - Ulrich
Benutzeravatar
peterpy
User
Beiträge: 133
Registriert: Donnerstag 7. März 2013, 11:35

Dienstag 23. November 2021, 08:15

Hallo Ulrich,
vielleicht hilft dir das weiter:https://tkdocs.com/shipman/ttk-theme-layer.html
Gruss Peter
Sempervivum
User
Beiträge: 5
Registriert: Montag 22. November 2021, 21:57

Dienstag 23. November 2021, 17:55

Hallo Peter, ich hätte dazu schreiben müssen, dass ich schon beim Laden des Themes mit der Anweisung oben mit einem TCL-Fehler heraus geflogen bin. D. h. bis zum Auswählen des Themes mit den Anweisungen aus deinem Link bin ich gar nicht gekommen.
Das Ganze hat mich sehr viel Kopfzerbrechen gekostet aber am Schluss habe ich dann dieses Theme gefunden:
https://github.com/rdbende/Sun-Valley-ttk-theme
Das lässt sich problemlos laden und gefällt mir nach einigen kleinen Anpassungen ebenfalls.
Ich vermute, dass sich die Themes, die skalierbar sind, nicht laden lassen.
Hier meine gesammelten Versuche:

Code: Alles auswählen

    awThemesPath = scriptPath + r'\awthemes-10.4.0'
    # Von den awthemes können nur awlight und awdark geladen werden,
    # awarc und awbreeze führen zum Fehler:
    root.tk.call('lappend', 'auto_path', awThemesPath)
    root.tk.call('package', 'require', 'awlight')
    root.tk.call('package', 'require', 'awdark')
    # root.tk.call('package', 'require', 'awarc')
    # root.tk.call('package', 'require', 'awbreeze')

    # Breeze kann ebenfalls nicht geladen werden:
    breezePath = scriptPath + r'\Breeze\breeze.tcl'
    # root.tk.call("source", breezePath)

    # Sunvalley funktioniert dagegen:
    sunValleyPath = scriptPath + r'\Sunvalley\sun-valley.tcl'
    root.tk.call("source", sunValleyPath)

    s = ttk.Style()
    print(s.theme_names())
    ttk.Style(root).theme_use('sun-valley-light')
Beste Grüße - Ulrich
Benutzeravatar
__blackjack__
User
Beiträge: 9472
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Dienstag 23. November 2021, 20:40

@Sempervivum: Pfade sind keine simplen Zeichenketten und der \ hat in Zeichenkettenliteralen eine besondere Bedeutung. \a ist das Bell-Zeichen und \b das Backspacezeichen. Also entweder den \ mit einem \ schützen, dass Du da tatsächlich jeweils ein \ hast und das am besten mit allen machen, ob die das nun brauchen oder nicht, oder ein ”rohes” Zeichenkettenliteral verwenden in dem die \ keine besondere Bedeutung haben.

Edit: Namen werden in Python übrigens klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).

Code: Alles auswählen

loop_:  cmp     byte [asleep],0
        jne     return
        inc     dword [sheep]
        jmp     loop_
return: ret
Antworten