tkinter - ttk.Button

ttk.Button

ttk.Button erzeugen

button = ttk.Button(parent, Optionen)

OptionsnameBeschreibung
default"normal", "active" oder "disabled". Zusätzlicher Status für Knöpfe in Dialogfenstern, in denen es einen "default"-Knopf gibt.
widthBreite des Knopfes in Zeichenbreite. Negative Werte bedeuten Mindestbreite.

ttk.Button kennt die Standardoptionen:class_, compound, cursor, image, justify, state, style, takefocus, text, textvariable, underline und command

Das folgende Programm stellt einen Knopf bereit und reagiert auf Knopfdruck:

Bild der Anwendung
import tkinter as tk
from tkinter import ttk

class A(tk.Tk):
    def __init__(self):
        super().__init__()
        self.geometry("200x200")
        self._createWidgets()

    def _createWidgets(self):
        button1 = ttk.Button(self, text='Erster Button', command=self._onButtonPress)
        button1.pack(fill=tk.BOTH, expand=tk.YES)

        self._labelText = tk.StringVar(value='warte...')
        label = ttk.Label(self, textvariable=self._labelText)
        label.pack(fill=tk.BOTH, expand=tk.YES)

    def _onButtonPress(self):
        self._labelText.set('Knopf 1 gedrückt')

if __name__ == '__main__':
    window = A()
    window.mainloop()

Methoden

Mehrere Knöpfe - eine Callback

Möchte man mit mehrerren Knöpfen auf eine Callback zielen, dann ist es hilfreich, die Knöpfe unterscheiden zu können. Hierbei hilft lambda:

import tkinter as tk
from tkinter import ttk

class A(tk.Tk):
    def __init__(self):
        super().__init__()
        self.geometry("200x200")
        self._createWidgets()

    def _createWidgets(self):
        button1 = ttk.Button(self, text='Erster Button',
                             command=lambda x=1: self._onButtonPress(x))
        button1.pack(fill=tk.BOTH, expand=tk.YES)

        button2 = ttk.Button(self, text='Zweiter Button',
                             command=lambda x=2: self._onButtonPress(x))
        button2.pack(fill=tk.BOTH, expand=tk.YES)

        self._labelText = tk.StringVar(value='warte...')
        label = ttk.Label(self, textvariable=self._labelText)
        label.pack(fill=tk.BOTH, expand=tk.YES)

    def _onButtonPress(self, whichOne):
        if whichOne == 1:
            self._labelText.set('Knopf 1 gedrückt')
        else:
            self._labelText.set('Knopf 2 gedrückt')

if __name__ == '__main__':
    window = A()
    window.mainloop()

Toolbutton

Für eine schnelle Style-variante ohne Rahmen kann man auf Toolbutton zurückgreifen. Hier die zwei Styles im Vergleich:

Bild der Anwendung
import tkinter as tk
from tkinter import ttk

class A(tk.Tk):
    def __init__(self):
        super().__init__()
        self.geometry("200x200")
        self._createWidgets()

    def _createWidgets(self):
        button1 = ttk.Button(self, style='Toolbutton', text='Erster Button')
        button1.pack()

        button2 = ttk.Button(self, text='Zweiter Button')
        button2.pack()

if __name__ == '__main__':
    window = A()
    window.mainloop()

Referenzen

Siehe Auch

https://www.tcl.tk/man/tcl8.7/TkCmd/ttk_button.html