Python tkinter button style

Add style to Python tkinter button

Tkinter has great support for creating the GUI programs based on python. It offers different ways of styling a button on the Tkinter canvas based on its font, size, colour etc. In this article we will see how to apply style to specific buttons or all buttons in general on the canvas.

Applying to Specific Buttons

Lets consider the case when we have two buttons in the canvas and we want to apply some styling only to the first button. We use the W.TButton as part of the configuration along with the font and the foreground colour.

Example

from tkinter import * from tkinter.ttk import * # Set the canvas canv = Tk() canv.geometry('200x150') #Create style object sto = Style() #configure style sto.configure('W.TButton', font= ('Arial', 10, 'underline'), foreground='Green') #Button with style btns = Button(canv, text='Welcome !', style='W.TButton', command=canv.destroy) btns.grid(row=0, column=1, padx=50) #Button without style btnns = Button(canv, text='Click to Start !', command=None) btnns.grid(row = 1, column = 1, pady = 10, padx = 50) canv.mainloop()

Output

Running the above code gives us the following result −

Applying to All Buttons

It is a similar configuration as above except that it has Tbutton as its style which automatically applies to all the buttons on the canvas.

Example

from tkinter import * from tkinter.ttk import * canv = Tk() canv.geometry('200x150') #Create style object sto = Style() #configure style sto.configure('TButton', font= ('calibri', 10, 'bold', 'underline'), foreground='Green') # button 1 btns = Button(canv, text='Welcome !', style='TButton', command=canv.destroy) btns.grid(row=0, column=1, padx=50) # button 2 btnns = Button(canv, text='Click to start !', command=None) btnns.grid(row=1, column=1, pady=10, padx=50) canv.mainloop()

Output

Running the above code gives us the following result −

Читайте также:  Java string format with parameters

Источник

Python tkinter button style

Стиль описывает внешний вид виджета. За установку стиля в виджетах отвечает параметр style . Встроенные виджеты по умолчанию применяют некоторые встроенные стили. В частности, все кнопки применяют стиль TButton, который описывает, как выглядят кнопки. Каждый стиль имеет имя. При создании, изменении или применении стиля к виджетам, необходимо знать его имя.

Чтобы узнать стиль определенного виджета, можно обратиться к его параметру style :

label = ttk.Label(text="Hello World") label.pack(anchor=CENTER, expand=1) print(label["style"])

Если возвращается пустая строка, то значит, что к виджету применяется стиль по умолчанию. В этом случае название стиля можно получить с помощью метода winfo_class() :

label = ttk.Label(text="Hello World") print(label.winfo_class()) # TLabel

Как правило, встроенные стили называются по имени класса виджета и предваряются буквой T. Например, для виджета Label — стиль TLabel, для Button — TButton.

Определение и применение стилей

Стиль в Tkinter представляет объект Style . У данного объект есть метод configure() , который позволяет настроить стиль

from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") label_style = ttk.Style() label_style.configure("My.TLabel", # имя стиля font="helvetica 14", # шрифт foreground="#004D40", # цвет текста padding=10, # отступы background="#B2DFDB") # фоновый цвет label = ttk.Label(text="Hello World", style="My.TLabel") label.pack(anchor=CENTER, expand=1) root.mainloop()

стили в виджетах в Tkinter и Python

Здесь создается стиль в виде объекта label_style. В методе configure() первым параметром передается имя стиля — в даннои случае «My.TLabel». Все остальные параметры настраивают различные аспекты стиля, так здесь устанавливаются шрифт, цвет фона и текста и отступы.

label_style.configure("My.TLabel", # имя стиля font="helvetica 14", # шрифт foreground="#004D40", # цвет текста padding=10, # отступы background="#B2DFDB") # фоновый цвет

Затем применяем этот стиль, передавая его параметру style :

label = ttk.Label(text="Hello World", style="My.TLabel")

Имена стилей

Имя создаваемых стилей имеют следующий формат:

новый_стиль.встроенный_стиль

Например, в примере выше название стиля «My.TLabel» указывает, что фактически он называется «My» и наследуется от «TLabel». И те параметры, которые не будут явным образом определены, будут унаследованы от родительского стиля «TLabel»

Читайте также:  Typescript перечисление возможных значений

Расширение встроенных стилей

Вместо создания новых стилей можно просто изменить отдельные характеристики уже существующих:

from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") ttk.Style().configure("TLabel", font="helvetica 13", foreground="#004D40", padding=8, background="#B2DFDB") ttk.Label(text="Hello World!").pack(anchor=NW, padx=6, pady=6) ttk.Label(text="Bye World..").pack(anchor=NW, padx=6, pady=6) root.mainloop()

изменение встроенных стилей в виджетах в Tkinter и Python

В данном случае изменяется встроенный стиль TLabel. Он применяется к меткам по умолчанию, поэтому данный стиль не надо явным образом устанавливать для меток.

Применение стиля ко всем виджетам

Выше стиль применялся к меткам Label, к другим же типам виджетов он не применялся. Если же мы хотим, чтобы у нас был бы общий стиль для всех типов виджетов, то в метод configure() в качестве имени стиля передается «.»

from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") ttk.Style().configure(".", font="helvetica 13", foreground="#004D40", padding=8, background="#B2DFDB") ttk.Label(text="Hello World!").pack(anchor=NW, padx=6, pady=6) ttk.Button(text="Click").pack(anchor=NW, padx=6, pady=6) root.mainloop()

Подобный стиль также не надо явно применять, он применяется автоматически ко всем виджетам

Источник

Оцените статью