Seite 1 von 1

Mehrere Schriftarten in einem Button

Verfasst: Donnerstag 27. April 2023, 20:15
von Axel_S
Hi,

ich möchte gerne in der Beschriftung eines Buttons mehrere Schriftarten verwenden, um den aktuellen Schaltzustand anzuzeigen.

Code: Alles auswählen

import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()

# Erstellen des Buttons mit fett formatiertem und normalem Text
button = ttk.Button(root, text="Fett, " + "Normal")
button.pack()

root.mainloop()
Trozt längerer Suche habe ich nichts gefunden, was funktioniert. Habt Ihr eine Idee?

Danke und Gruß,
Axel

Re: Mehrere Schriftarten in einem Button

Verfasst: Donnerstag 27. April 2023, 22:42
von __deets__
Das geht denke ich nicht. Du musst dir dann einen eigenen Button mit Canvas bauen. Oder die GUI mit anderen Elementen aufbauen.

Re: Mehrere Schriftarten in einem Button

Verfasst: Freitag 28. April 2023, 07:00
von Dennis89
Hallo,

ich weis nicht ob ich dich richtig verstanden habe, aber meinst du sowas(?):

Code: Alles auswählen

import tkinter as tk
import tkinter.font as font


class ButtonTest(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        self.normal_font = font.Font(family="Arial", size=12)
        self.bold_font = font.Font(family="Arial", size=20, weight="bold")
        self.button_state = False
        self.button = tk.Button(
            self, text="Drück mich", command=self.change_font, font=self.normal_font
        )
        self.button.grid(row=0, column=0)

    def change_font(self):
        if self.button_state:
            self.button.config(font=self.normal_font)
            self.button_state = False
        else:
            self.button.config(font=self.bold_font)
            self.button_state = True


def main():
    root = tk.Tk()
    root.title("Test")
    app = ButtonTest(root)
    app.pack()
    app.mainloop()


if __name__ == "__main__":
    main()
Grüße
Dennis

Re: Mehrere Schriftarten in einem Button

Verfasst: Freitag 28. April 2023, 08:28
von __deets__
Er will verschiedene Schriftarten zugleich. Das geht nur mit Rich text Formaten oder sowas. Das kann Tkinter nicht.

Re: Mehrere Schriftarten in einem Button

Verfasst: Freitag 28. April 2023, 10:24
von Dennis89
Ach dass der Button eine Beschriftung bekommt, die vielleicht so aussieht "An / Aus" und je nach dem wir das "An" oder das "Aus" dann fett dargestellt?
Na dann kann man mein Vorschlag wenigstens als Alternative im Hinterkopf behalten.

Viele Grüße
Dennis

Re: Mehrere Schriftarten in einem Button

Verfasst: Freitag 28. April 2023, 12:31
von peterpy
Hallo Axel_S,
ich vermute Du suchst sowas.

Code: Alles auswählen

import tkinter as tk
from tkinter import font
from functools import partial

def main():
    root = tk.Tk()
    schrift_1 = ('DAVIS', '12', 'bold')
    schrift_2 = ('C059', '16', 'normal', 'italic')
    taste = tk.Button(root, height=3, bd=5)
    zeile_1 = tk.Label(taste, height=1, text='abc', font=schrift_1, width=5,
                       relief='flat', fg='red')
    zeile_2 = tk.Label(taste, height=1, text='ABC', font=schrift_2, width=5,
                       relief='flat', fg='green')
    taste.config(command=partial(wechsle, zeile_1, zeile_2, schrift_1,
                                 schrift_2))
    zeile_1.bind('<Button-1>', partial(betaetigt, zeile_1, zeile_2, schrift_1,
                                 schrift_2, taste))
    zeile_2.bind('<Button-1>', partial(betaetigt, zeile_1, zeile_2, schrift_1,
                                 schrift_2, taste))
    zeile_1.bind('<ButtonRelease-1>', partial(losgelassen, taste))
    zeile_2.bind('<ButtonRelease-1>', partial(losgelassen, taste))
    taste.pack(fill='x')
    zeile_1.pack()
    zeile_2.pack()
    root.mainloop()

def wechsle(zeile_1, zeile_2, schrift_1, schrift_2):    
    if zeile_1['font'] == 'DAVIS 12 bold':
        zeile_1.config(font=schrift_2)
        zeile_2.config(font=schrift_1)
        zeile_1.config(fg='green')
        zeile_2.config(fg='red')
    else:
        zeile_1.config(font=schrift_1)
        zeile_2.config(font=schrift_2)
        zeile_2.config(fg='green')
        zeile_1.config(fg='red')

def losgelassen(taste, event):
    taste.config(relief='raised')

def betaetigt(zeile_1, zeile_2, schrift_1, schrift_2, taste, event):    
    wechsle(zeile_1, zeile_2, schrift_1, schrift_2)
    taste.config(relief='sunken')

if __name__ == '__main__':
    main()
Gruss Peter

Re: Mehrere Schriftarten in einem Button

Verfasst: Freitag 28. April 2023, 21:17
von Axel_S
Hallo,

vielen lieben Dank für die vielen Antworten. Dewn letzten Code von Peter habe ich gerade ausprobiert und er macht genau das, was ich mir vorgestellt habe.Vielen Dank.
Ich werde ihn mir jetzt mal genauer ansehen und versuchen entsprechend umzusetzen.

Liebe Grüße,
Axel