ttk.Button
ttk.Button erzeugen
button = ttk.Button(parent, Optionen)
Optionsname | Beschreibung |
---|---|
default | "normal", "active" oder "disabled". Zusätzlicher Status für Knöpfe in Dialogfenstern, in denen es einen "default"-Knopf gibt. |
width | Breite 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:
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
- ttk.Button kennt die Methode
b.invoke()
: Ruft die zum Button gehörende Callback auf - Konfigurationsmethoden:
cget(…)
undconfigure(…)
- Sonstige Methoden:
identify(…)
,instate(…)
undstate(…)
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:
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()