Seite 1 von 1

Schrifttyp von Notebook-Tabs (Reitern) ändern

Verfasst: Samstag 31. Oktober 2020, 02:06
von Tommilein
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

Re: Schrifttyp von Notebook-Tabs (Reitern) ändern

Verfasst: Samstag 31. Oktober 2020, 12:36
von __blackjack__
@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.

Re: Schrifttyp von Notebook-Tabs (Reitern) ändern

Verfasst: Samstag 31. Oktober 2020, 18:23
von Tommilein
@__blackjack__: Vielen Dank für die Tipps, werde ich beherzigen.