Schrifttyp von Notebook-Tabs (Reitern) ändern

Fragen zu Tkinter.
Antworten
Tommilein
User
Beiträge: 10
Registriert: Mittwoch 16. September 2020, 03:56

Hallo,
ich schlage mich mit folgendem Problem rum:
Ich möchte den Schrifttyp meiner Notebook-Tabs ändern. Das klappt auch ganz gut mit folgendem Code:

Code: Alles auswählen

from tkinter import * 
from tkinter import ttk
import tkinter.font as tkFont

class DatenverarbeitungsFenster():
    
    def __init__(self, listeSpielerNamen):
        self.root = Tk()
        self.listeSpielerNamen = listeSpielerNamen
        
        f = tkFont.Font(family='Times', size=20)
        s = ttk.Style()
        s.configure('TNotebook.Tab', font=f)
             
        self.notebook = ttk.Notebook(self.root, width=500, height=300)
        
        spielerTabs = {} 
        for spielerName in self.listeSpielerNamen:

            tab = ttk.Frame(self.notebook)
            self.notebook.add(tab, text = spielerName)
            spielerTabs[spielerName] = tab
            
        self.notebook.grid()

liste = ['Tim','Tom']
d = DatenverarbeitungsFenster(liste)
Nun möchte ich gerne die Spielernamen über eine andere GUI übergeben, die dem Notebook vorgeschaltet ist:

Code: Alles auswählen

from tkinter import * 
from tkinter import ttk
import tkinter.font as tkFont


class SpielStartFenster():
    def __init__(self):
        self.fenster = Tk()
        self.listeSpielerNamen = []
        self.nameSpieler_var = StringVar()

        self.nameSpielerEntry = Entry(self.fenster,
        textvariable = self.nameSpieler_var).grid()                              

        self.nameAufnehmenButton = Button(self.fenster, text='Spielername aufnehmen',
        command=self.nameAufnehmen).grid()

        self.startButton = Button(self.fenster, text='Start',
        command=self.datenVerarbeitung).grid(row = 1, column = 1)

        self.fenster.mainloop()
           
    def nameAufnehmen(self):
        self.listeSpielerNamen = self.listeSpielerNamen + [self.nameSpieler_var.get()]

    def getListeSpielerNamen(self):
        return self.listeSpielerNamen
        
    def datenVerarbeitung(self): 
        DatenverarbeitungsFenster(self.getListeSpielerNamen())
      
#ab hier folgt der Programmcode von oben

class DatenverarbeitungsFenster():
    
    def __init__(self, listeSpielerNamen):
        self.root = Tk()
        self.listeSpielerNamen = listeSpielerNamen
        
        f = tkFont.Font(family='Times', size=20)
        s = ttk.Style()
        s.configure('TNotebook.Tab', font=f)
             
        self.notebook = ttk.Notebook(self.root, width=500, height=300)
        
        spielerTabs = {} 
        for spielerName in self.listeSpielerNamen:

            tab = ttk.Frame(self.notebook)
            self.notebook.add(tab, text = spielerName)
            spielerTabs[spielerName] = tab
            
        self.notebook.grid()

startFenster = SpielStartFenster()
Nun funktioniert's nicht mehr: Meine Reiterbezeichnungen werden nicht mehr mit dem vorgesehenen Schrifttyp formatiert.
Wäre klasse, wenn mir jemand weiterhelfen könnte.
Danke im Voraus,
Tommilein
Benutzeravatar
__blackjack__
User
Beiträge: 14226
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Tommilein: Es darf nur *ein* `Tk`-Objekt geben. Das ist *das* Hauptfenster. Für zusätzliche Fenster gibt es `Toplevel`.

Du solltest den Sternchen-Import loswerden und Dich bei den Namen an die Python-Konventionen halten. Ausserdem sind ein paar Namen sehr schlecht benannt. Ein Buchstabe ist nur in seltenen Fällen ein sinnvoller Name.
“Ich bin für die Todesstrafe. Wer schreckliche Dinge getan hat, muss eine angemessene Strafe bekommen. So lernt er seine Lektion für das nächste Mal.” — Britney Spears, Interview in der französischen Zeitung Libération, 2. April 2002
Tommilein
User
Beiträge: 10
Registriert: Mittwoch 16. September 2020, 03:56

@__blackjack__: Vielen Dank für die Tipps, werde ich beherzigen.
Antworten