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: 14085
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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Tommilein
User
Beiträge: 10
Registriert: Mittwoch 16. September 2020, 03:56

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