小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Python GUI 編程:tkinter 初學者入門指南——Ttk 小部件

 信息科技云課堂 2024-12-17 發(fā)布于山東

在本文中,將介紹Tkinter.ttk 主題小部件,是常規(guī) Tkinter 小部件的升級版本。。

Tkinter 有兩種小部件:經(jīng)典小部件、主題小部件。Tkinter 于 1991 年推出了經(jīng)典小部件,2007 年在 Tk8.5 中添加新式的主題小部件。主題小部件更新了部分經(jīng)典小部件,并增加了部分新的小部件。

要使用tkinter.ttk 主題小部件,需要使用以下語句進行導入

import tkinter as tk

from tkinter import ttk

Tk 主題小部件?改進了樣式和主題?,總共包含 18 種小部件 ,其中十二種已存在于 tkinter 中:

  • Button
  • Checkbutton
  • Entry
  • Frame
  • Label
  • LabelFrame
  • Menubutton
  • PanedWindow
  • Radiobutton
  • Scale
  • Scrollbar
  • Spinbox

新增六種小部件:

  • Combobox
  • Notebook
  • Progressbar
  • Separator
  • Sizegrip
  • Treeview

Tkinter 小部件具有更基本和傳統(tǒng)的外觀,而 Ttk 小部件提供更現(xiàn)代的外觀,可以更好地適應各種新的操作系統(tǒng)。

ttk 提供了增強的主題選項,允許開發(fā)人員使用各種預定義的樣式和主題。提升了性能,提供了更好的用戶體驗。

Tkinter 小部件更適合初學者使用,Ttk 小部件引入了更多的復雜特性,在處理樣式和主題時,提供了更大的靈活性。

Tkinter 小部件與Tkinter.Ttk 小部件的主要區(qū)別:

特征
Tkinter 小部件
Tkinter.Ttk 小部件
外觀
傳統(tǒng)的外觀
現(xiàn)代主題外觀
主題
有限的主題功能
具有各種預定義樣式的增強主題
跨平臺
在所有操作系統(tǒng)上外觀基本保持一致
適應不同的操作系統(tǒng)
定制
小部件特定的選項
基于樣式的自定義
性能
適用簡單的應用程序
適合更復雜的應用程序
復雜性
初學者容易使用
略微復雜

Tkinter 小部件與 Ttk 小部件 基本外觀對比

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Ttk 主題小部件演示')

left_frame = tk.Frame(root,  width=300,  height=400)
left_frame.pack(side='left',  fill='both',  padx=10,  pady=5,  expand=True)

right_frame  =  tk.Frame(root,  width=300,  height=400)
right_frame.pack(side='right',  fill='both',  padx=10,  pady=5,  expand=True)

def callback():
    pass

label = tk.Label(left_frame, text='標簽')
label.pack(pady=5)

label = ttk.Label(right_frame, text='ttk標簽')
label.pack(pady=5)

button = tk.Button(left_frame, text="按鈕", command=callback)
button.pack(pady=5)

button = ttk.Button(right_frame, text="ttk按鈕", command=callback)
button.pack(pady=5)

entry1 = tk.Entry(left_frame)
entry1.pack(pady=5)
entry1.insert(0"單行文本框")

entry2 = ttk.Entry(right_frame)
entry2.pack(pady=5)
entry2.insert(0"ttk單行文本框")

frame1 = tk.LabelFrame(left_frame, text='復選框')
frame1.pack(pady=5)
cb1 = tk.Checkbutton(frame1, text='Number 1')
cb1.pack()
cb2 = tk.Checkbutton(frame1, text='Number 2')import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Ttk 主題小部件演示')

style=ttk.Style()
style.theme_use('classic')
style.configure("design.TLabel",background="green",foreground="white",font="Arial 16 bold", padding=20)
style.configure("design.TButton",background="red",foreground="white",font="Arial 16 bold", padding=20)

label=ttk.Label(root,text = f"Ttk 標簽", style = "design.TLabel")
label.pack(pady=10)

button=ttk.Button(root,text = "Ttk 按鈕", style = "design.TButton")
button.pack(pady=10)

root.mainloop()
cb2.pack()

frame2 = ttk.LabelFrame(right_frame, text='ttk復選框')
frame2.pack(pady=5)
cb3 = ttk.Checkbutton(frame2, text='Number 3')
cb3.pack()
cb4 = ttk.Checkbutton(frame2, text='Number 4')
cb4.pack()

frame3 = tk.LabelFrame(left_frame, text='單選按鈕')
frame3.pack(pady=5)
r1 = tk.Radiobutton(frame3,text="option 1", value=1)
r1.pack()
r2 = tk.Radiobutton(frame3,text="option 2", value=2)
r2.pack()

frame4 = ttk.LabelFrame(right_frame, text='ttk單選按鈕')
frame4.pack(pady=5)
r1 = ttk.Radiobutton(frame4,text="option 1", value=1)
r1.pack()
r2 = ttk.Radiobutton(frame4,text="option 2", value=2)
r2.pack()

scale1 = tk.Scale(left_frame, from_=0, to=100, orient='horizontal', length=100)
scale1.pack(pady=5)
scale2 = ttk.Scale(right_frame, from_=0, to=100, orient='horizontal', length=100)
scale2.pack(pady=5)

menubttn = tk.Menubutton(left_frame, text = "菜單按鈕", relief = tk.RAISED)
menu = tk.Menu(menubttn, tearoff = 0)
menu.add_checkbutton(label = "Python")
menu.add_checkbutton(label = "Java")
menubttn["menu"] = menu
menubttn.pack(pady=5)

menubttn = ttk.Menubutton(right_frame, text = "ttk菜單按鈕")
menu = tk.Menu(menubttn, tearoff = 0)
menu.add_checkbutton(label = "Python")
menu.add_checkbutton(label = "Java")
menubttn["menu"] = menu
menubttn.pack(pady=5)

spinbox1 = tk.Spinbox(left_frame, from_=0, to=10, wrap=True)
spinbox1.pack()
spinbox2 = ttk.Spinbox(right_frame, from_=0, to=10, wrap=True)
spinbox2.pack()
root.mainloop()

Ttk 主題

Ttk 可以使用theme_names() 方法,獲取所有可用主題的列表。使用theme_use() 方法,應用主題。

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Ttk 主題小部件演示')

text = tk.StringVar()
style = ttk.Style(root)
def change_theme():
    style.theme_use(selected_theme.get())
    
def callback():
    pass

left_frame = tk.Frame(root,  width=300,  height=400)
left_frame.pack(side='left',  fill='both',  padx=10,  pady=5,  expand=True)

right_frame  =  tk.Frame(root,  width=300,  height=400)
right_frame.pack(side='right',  fill='both',  padx=10,  pady=5,  expand=True)

selected_theme = tk.StringVar()
theme_frame = ttk.LabelFrame(left_frame, text='Themes')
theme_frame.pack(padx=10, pady=10, ipadx=20, ipady=20)

for theme_name in style.theme_names():
    rb = ttk.Radiobutton(
        theme_frame,
        text=theme_name,
        value=theme_name,
        variable=selected_theme,
        command=change_theme)
    rb.pack(expand=True, fill='both')

label = ttk.Label(right_frame, text='ttk標簽')
label.pack(pady=5)
button = ttk.Button(right_frame, text="ttk按鈕", command=callback)
button.pack(pady=5)
entry = ttk.Entry(right_frame, textvariable=text, text="文本框")
entry.pack(pady=5)
entry.insert(0"ttk單行文本框")
frame2 = ttk.LabelFrame(right_frame, text='ttk復選框')
frame2.pack(pady=5)
cb3 = ttk.Checkbutton(frame2, text='Number 3')
cb3.pack()
cb4 = ttk.Checkbutton(frame2, text='Number 4')
cb4.pack()
frame4 = ttk.LabelFrame(right_frame, text='ttk單選按鈕')
frame4.pack(pady=5)
r1 = ttk.Radiobutton(frame4,text="option 1", value=1)
r1.pack()
r2 = ttk.Radiobutton(frame4,text="option 2", value=2)
r2.pack()
scale2 = ttk.Scale(right_frame, from_=0, to=100, orient='horizontal', length=100)
scale2.pack(pady=5)
menubttn = ttk.Menubutton(right_frame, text = "ttk菜單按鈕")
menu = tk.Menu(menubttn, tearoff = 0)
menu.add_checkbutton(label = "Python")
menu.add_checkbutton(label = "Java")
menubttn["menu"] = menu
menubttn.pack(pady=5)
spinbox2 = ttk.Spinbox(right_frame, from_=0, to=10, wrap=True)
spinbox2.pack(pady=5)
root.mainloop()

Ttk 樣式

Ttk 中的每個小部件都有一個默認樣式,該樣式包含了一些自定義設置。

小部件
樣式名稱
ButtonTButton
CheckbuttonTCheckbutton
ComboboxTCombobox
EntryTEntry
FrameTFrame
LabelTLabel
LabelFrameTLabelFrame
MenubuttonTMenubutton
NotebookTNotebook
PanedWindowTPanedwindow
ProgressbarHorizontal.TProgressbar
 / Vertical.TProgressbar
RadiobuttonTRadiobutton
ScaleHorizontal.TScale
 / Vertical.TScale
ScrollbarHorizontal.TScrollbar
 / Vertical.TScrollbar
SeparatorTSeparator
SizegripTSizegrip
TreeviewTreeview

每個樣式都有一組定義小部件外觀的選項。要修改樣式,請使用以下方法:

style = ttk.Style()

style.configure(style_name, **options)

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Ttk 主題小部件演示')

style=ttk.Style()
style.theme_use('classic')
style.configure("design.TLabel",background="green",foreground="white",font="Arial 16 bold", padding=20)
style.configure("design.TButton",background="red",foreground="white",font="Arial 16 bold", padding=20)

label=ttk.Label(root,text = f"Ttk 標簽", style = "design.TLabel")
label.pack(pady=10)

button=ttk.Button(root,text = "Ttk 按鈕", style = "design.TButton")
button.pack(pady=10)

root.mainloop()

Ttk 樣式的動態(tài)更改

使用 Ttk 樣式的map() 方法根據(jù)特定事件動態(tài)更改小組件的外觀。

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Ttk 主題小部件演示')

style = ttk.Style()
style.configure('TButton', font=('Helvetica'16))
style.map('TButton', foreground=[('pressed''blue'), ('active''red')])

button = ttk.Button(root, text='按鈕')
button.pack(pady=20)
button = ttk.Button(root, text='按鈕')
button.pack(pady=20)
root.mainloop()

在以上示例中,當將鼠標移動到按鈕上時,其文本顏色將變?yōu)榧t色。當單擊或按下按鈕時,其文本顏色將變?yōu)樗{色。

點亮在看,你最好看!

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約