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: 14342
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.
“It is easier to optimize correct code than to correct optimized code.” — Bill Harlan
Tommilein
User
Beiträge: 10
Registriert: Mittwoch 16. September 2020, 03:56

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