با سلام بهنام صباغی هستم با اموزش gui با کتابخانه tkinter این قسمت style
خب دوستان قبلا د مورد state براتون توضیح دادم فقط اینجا میخوام به 10 تا از ورودی هایی که میتونه بگیره یه اشاره داشته باشم
1 - active
2 - disabled
3 - focus
4 - pressed
5 - selected
6 - background
7 - alternate
8 - invalid
9 - hover
10- readonly
خب دوستان دیدید که برای تعیین خصوصیت های هر ابزار از config اون استفاده میکردیم توی حالت عادی ولی وقتی از ttk استفاده میکنیم میتونیم یک تم تعریف کنیم و برای چندین ابزار استافده کنیم یا مثلا میتونیم تم دکمه هامون رو اختصاصی کنیم یا هر ابزار دیگه ای رو برای این کار اول یک استایل ایجاد میکنیم

style=ttk.Style()
برای گرفتن نام تم هایی که برای حالت کلی برنامه موجودند از تابع زیر استفاده میکنیم
print(style.theme_names())
برای استفاده از تم هامون به صورت زیر عمل میکنیم مثلا من تم clam رو استفاده میکنم
style.theme_use('clam')
برناممون خیلی قشنگتر شد اگر از ttk استفاده کرده باشید مثلا کد زیر رو اجرا کنید
#************************CODE************************
from tkinter import *
from tkinter import ttk

root=Tk()

button1=ttk.Button(root,text='bytton1')
button1.pack()

button2=ttk.Button(root,text='bytton2')
button2.pack()

style=ttk.Style()
print(style.theme_names())




style.theme_use('clam')
#***************************************************
میبینید چقدر چهره ی نرم افزارمون تغییر کرد ؟ خب حالا برای استفاده از اون جالتی که گفتم مثلا رنگ پسزمینه ی همه ی دکمه هامون رو عوض میکنیم باید استایل دکمه رو بدونیم که هست TButton یا مثلا برای فریم هست TFrame اکثر ابزار ها یک T اضافی اول اسمشون میشه استایلشون بجز ابزار زیر
1 - Treeview
2 - TPanedwindow (دقت کنید این تی داره ولی دبلیو کوچیکه )
3 - Horizontal.TScale or Vertical.TScale
4 - Horizontal.TScrollbar or Vertical.TScrollbar
5 - Horizontal.TProgressbar or Vertical.TProgressbar

خب حس میکنم زهرتون رفت الان فکر کردید باید اینها همه رو حفظ کنید نه لازم نیست برای این که بفهمید استایل پیشفرض یم ابزار چیه باید تابع winfo_class() رو برای اون ابزار فراخوانی کنید
#************************CODE************************
from tkinter import *
from tkinter import ttk

root=Tk()

button1=ttk.Button(root,text='bytton1')
button1.pack()

button2=ttk.Button(root,text='bytton2')
button2.pack()

style=ttk.Style()
print(style.theme_names())

print(button2.winfo_class())


style.theme_use('clam')
#***************************************************
برای تغییر خصوصیات یک استایل به صورت زیر عمل میکنیم
style.configure('TButton',background='red',foreground='blue')
خب اول تابع configure مربوط به استایلمون رو صدا میزنیم و اولین ورودی نام استایلی که میخوایم تغییر بدیم و بعد خصوصیاتی که میخوایم توش تغییر کنه

برای ساخت یک استایل از اسم دلخواه نقطه نام استایل اصلی استفاده میکنیم مثلا من در زیر استایل alarm رو برای باتن ایجاد میکنم و بکگراندش رو زرد  رنگ متن رو نارنجی میکنم و اندازه ی فونتش رو 24 و بولدش میکنم ببینید
style.configure('alarm.TButton',foreground='orange',background='yellow',font=('Arial',24,'bold'))
#************************CODE*************************************
from tkinter import *
from tkinter import ttk

root=Tk()

button1=ttk.Button(root,text='bytton1')
button1.pack()

button2=ttk.Button(root,text='bytton2')
button2.pack()

style=ttk.Style()


style.theme_use('clam')
style.configure('alarm.TButton',foreground='orange',background='yellow',font=('Arial',24,'bold'))
button2.configure(style='alarm.TButton')

root.mainloop()
#*******************************************************************
دوستان یادتونه اول همین قسمت state ها رو بهتون معرفی کردم خب حالا میخوام برای هر state یه خصوصیت مختص خودش تعریف کنیم
style.map('alarm.TButton',foreground=[('pressed','pink'),('focus','red')])
از تایع map که مال style هست استفاده کردم و foreground رو برابر یک لیست از تاپل ها قرار دادم مثلا تاپل زیر رو ببینید
('focus','red')
دوتا عضو داره اولی state مورد نظرمونه که میخایم به ازای اون تغییر ایجاد کنیم و دومی رنگ متنیه که میخوایم بگیره در اون حالت مثلا برای تاپل بالا وقتی فوکوسمون روی ابزارمون باشه رنگ متنش میشه قرمز
برای فهمیدن لایه های یک استایل
style.layout('TButton')
برای گزینه های موجود برای هر لایه
style.element_options('button.label')
برای گرفتم مقدار یک خصوصیت
style.loockup('TButton','foreground')