溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

發(fā)布時間:2022-06-22 09:19:45 來源:億速云 閱讀:497 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Python GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強(qiáng),希望這篇“Python GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口”文章能幫助大家解決問題。

這兩張圖片是截取官網(wǎng)上提供的展示效果圖:

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

主題切換

簡單的主題切換,由于當(dāng)前窗口上組件很少,所以感覺效果不明顯,但是當(dāng)組件布局很多時就會很好看。

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import ttkbootstrap as ttk
from ttkbootstrap.constants import *
root = ttk.Window()
style = ttk.Style()
theme_names = style.theme_names()#以列表的形式返回多個主題名
theme_selection = ttk.Frame(root, padding=(10, 10, 10, 0))
theme_selection.pack(fill=X, expand=YES)
lbl = ttk.Label(theme_selection, text="選擇主題:")
theme_cbo = ttk.Combobox(
        master=theme_selection,
        text=style.theme.name,
        values=theme_names,
)
theme_cbo.pack(padx=10, side=RIGHT)
theme_cbo.current(theme_names.index(style.theme.name))
lbl.pack(side=RIGHT)
def change_theme(event):
    theme_cbo_value = theme_cbo.get()
    style.theme_use(theme_cbo_value)
    theme_selected.configure(text=theme_cbo_value)
    theme_cbo.selection_clear()
theme_cbo.bind('<<ComboboxSelected>>', change_theme)
theme_selected = ttk.Label(
        master=theme_selection,
        text="litera",
        font="-size 24 -weight bold"
)
theme_selected.pack(side=LEFT)
root.mainloop()

ttkbootstrap一些簡單使用介紹

首先對它實例化創(chuàng)建應(yīng)用程序窗口的一些簡單介紹。

import ttkbootstrap as ttk
#實例化創(chuàng)建應(yīng)用程序窗口
root = ttk.Window(
        title="窗口名字",        #設(shè)置窗口的標(biāo)題
        themename="litera",     #設(shè)置主題
        size=(1066,600),        #窗口的大小
        position=(100,100),     #窗口所在的位置
        minsize=(0,0),          #窗口的最小寬高
        maxsize=(1920,1080),    #窗口的最大寬高
        resizable=None,         #設(shè)置窗口是否可以更改大小
        alpha=1.0,              #設(shè)置窗口的透明度(0.0完全透明)
        )
# root.place_window_center()    #讓顯現(xiàn)出的窗口居中
# root.resizable(False,False)   #讓窗口不可更改大小
# root.wm_attributes('-topmost', 1)#讓窗口位置其它窗口之上
root.mainloop()

標(biāo)簽

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import ttkbootstrap as ttk
from ttkbootstrap.constants import *
root = ttk.Window()
ttk.Label(root,text="標(biāo)簽1",bootstyle=INFO).pack(side=ttk.LEFT, padx=5, pady=10)
ttk.Label(root,text="標(biāo)簽2",boot).pack(side=ttk.LEFT, padx=5, pady=10)
ttk.Label(root,text="標(biāo)簽3",boot).pack(side=ttk.LEFT, padx=5, pady=10)
ttk.Label(root, text="標(biāo)簽4", bootstyle=WARNING, font=("微軟雅黑", 15), background='#94a2a4').pack(side=LEFT, padx=5, pady=10)
root.mainloop()
'''
# bootstyle colors
PRIMARY = 'primary'
SECONDARY = 'secondary'
SUCCESS = 'success'
DANGER = 'danger'
WARNING = 'warning'
INFO = 'info'
LIGHT = 'light'
DARK = 'dark'

# bootstyle types
OUTLINE = 'outline'
LINK = 'link'
TOGGLE = 'toggle'
INVERSE = 'inverse'
STRIPED = 'striped'
TOOLBUTTON = 'toolbutton'
ROUND = 'round'
SQUARE = 'square'
'''

按鈕

按鈕樣式:

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import ttkbootstrap as ttk
from ttkbootstrap.constants import *
root = ttk.Window()
ttk.Button(root, text="Button 1", bootstyle=SUCCESS).pack(side=LEFT, padx=5, pady=10)
ttk.Button(root, text="Button 2", bootstyle=(INFO, OUTLINE)).pack(side=LEFT, padx=5, pady=10)
ttk.Button(root, text="Button 3", bootstyle=(PRIMARY, "outline-toolbutton")).pack(side=LEFT, padx=5, pady=10)
ttk.Button(root, text="Button 4", boot).pack(side=LEFT, padx=5, pady=10)
ttk.Button(root, text="Button 5", boot).pack(side=LEFT, padx=5, pady=10)
ttk.Button(root, text="Button 6", state="disabled").pack(side=LEFT, padx=5, pady=10) #在禁用狀態(tài)下創(chuàng)建按鈕
root.mainloop()

按鈕點擊:

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import ttkbootstrap as ttk
from ttkbootstrap.constants import *
root = ttk.Window()
#為按鈕添加點擊事件
#法一
def button1():
    print("Button1點擊了一下!")
ttk.Button(root,text="Button1", bootstyle=(PRIMARY, "outline-toolbutton"),command=button1).pack(side=LEFT, padx=5, pady=10)
#法二
def button2(event): #這里要加一個參數(shù),不然會報錯
    print("Button2點擊了一下!")
    button_text = event.widget["text"] #得到按鈕上的文本
    print(button_text)
b = ttk.Button(root,text="Button2", bootstyle=(PRIMARY, "outline-toolbutton"))
b.pack(side=LEFT, padx=5, pady=10)
b.bind("<Button-1>", button2) #<Button-1>鼠標(biāo)左鍵
root.mainloop()

輸入框

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import ttkbootstrap as ttk
from ttkbootstrap.constants import *
root = ttk.Window()
e1 = ttk.Entry(root,show=None)
e1.insert('0',"默認(rèn)插入內(nèi)容")
e1.grid(row=5, column=1, sticky=ttk.W, padx=10,pady=10)
e2 = ttk.Entry(root,show="*",width=50,bootstyle=PRIMARY)
e2.grid(row=10, column=1, sticky=ttk.W, padx=10, pady=10)
e3_content = ttk.StringVar()
e3 = ttk.Entry(root,bootstyle='success', textvariable=e3_content).grid(row=15, column=1, sticky=ttk.W, padx=10, pady=10)
def get_entry_contetn():
    print("e1: ",e1.get())
    print("e2: ",e2.get())
    print("e3: ",e3_content.get())
ttk.Button(root,text="get_entry_contetn", bootstyle=(PRIMARY, "outline-toolbutton"),command=get_entry_contetn).grid(row=20, column=1, sticky=ttk.W, padx=10, pady=10)
root.mainloop()

文本框

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import ttkbootstrap as ttk
from ttkbootstrap.constants import *
root = ttk.Window()
text = ttk.Text(root,)
text.pack(padx=10,pady=10,fill=BOTH)
text.insert('insert','text-content 1') #插入內(nèi)容
text.delete("0.0",'end') #刪除內(nèi)容
text.insert('insert','text-content 2\npy')
text.see(ttk.END) #光標(biāo)跟隨著插入的內(nèi)容移動
root.mainloop()

日期輸入

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import ttkbootstrap as ttk
from ttkbootstrap.constants import *
root = ttk.Window()
de1 = ttk.DateEntry()
de1.grid(row=6, column=1, sticky=ttk.W,padx=10, pady=10)
print(de1.entry.get())

de2 = ttk.DateEntry(boot,dateformat=r"%Y") #r"%Y-%m-%d"
de2.grid(row=6, column=2, sticky=ttk.W,padx=10, pady=10)
def get_dataentry():
    print(de2.entry.get())
ttk.Button(root,text="get_dataentry", bootstyle=(PRIMARY, "outline-toolbutton"),command=get_dataentry).grid(row=20, column=1, sticky=ttk.W, padx=10, pady=10)
root.mainloop()

單選按鈕

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import ttkbootstrap as ttk
root = ttk.Window()
variable_value = ttk.StringVar()
variable_value_dist = {
    "0":"男",
    "1":"女",
    "2":"未知"
}
ttk.Radiobutton(root, text='男', variable=variable_value, value=0).pack(side=ttk.LEFT, padx=5)
ttk.Radiobutton(root, text='女', variable=variable_value, value=1).pack(side=ttk.LEFT, padx=5)
ttk.Radiobutton(root, text='未知', variable=variable_value, value=2).pack(side=ttk.LEFT, padx=5)
def ensure():
    print(variable_value_dist[variable_value.get()])
ttk.Button(text="確定", command=ensure).pack(side=ttk.LEFT, padx=5)
root.mainloop()

多選按鈕

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import ttkbootstrap as ttk
root = ttk.Window()
variable_content = [
    [ttk.StringVar(),"111"],
    [ttk.StringVar(),"222"],
    [ttk.StringVar(),"333"],
    [ttk.StringVar(),"666"]
]
ttk.Checkbutton(root, text="111", variable=variable_content[0][0]).pack(side=ttk.LEFT, padx=5)
ttk.Checkbutton(root, text="222", variable=variable_content[1][0], boot).pack(side=ttk.LEFT, padx=5)
ttk.Checkbutton(root, text="333", variable=variable_content[2][0], boot).pack(side=ttk.LEFT, padx=5)
ttk.Checkbutton(root, text="666", variable=variable_content[3][0]).pack(side=ttk.LEFT, padx=5)
def ensure():
    print([v for i, v in variable_content if i.get()])
ttk.Button(text="確定",command=ensure).pack(side=ttk.LEFT, padx=5)
root.mainloop()

組合框

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import ttkbootstrap as ttk
from ttkbootstrap.constants import *
root = ttk.Window()
cbo = ttk.Combobox(
            master=root,
            bootstyle = DANGER,
            font = ("微軟雅黑",12),
            values=['content 1', 'content 2', 'content 3'],
        )
cbo.current(1) #首先展示values里面索引的對應(yīng)的值
cbo.pack()
# cbo.set('set other')
def ensure(event):
    print(cbo.get())
cbo.bind('<<ComboboxSelected>>', ensure)
root.mainloop()

Frame和Labelframe

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import ttkbootstrap as ttk
from ttkbootstrap.constants import *
root = ttk.Window()
f = ttk.Frame(bootstyle=SUCCESS)
f.place(x=10,y=10,width=600,height=200)

lf = ttk.Labelframe(text="提示",bootstyle=PRIMARY,width=100,height=60)
lf.place(x=10,y=210,width=300,height=100)
ttk.Label(lf,text="標(biāo)簽").pack()
ttk.Button(lf,text="按鈕").pack()
root.mainloop()

儀表

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import psutil,time,threading
import ttkbootstrap as ttk
from ttkbootstrap.constants import *
root = ttk.Window()
ttk.Meter(
        master=root,
        bootstyle=DEFAULT,
        metertype="full",#將儀表顯示為一個完整的圓形或半圓形(semi)
        wedgesize=5, #設(shè)置弧周圍的指示器楔形長度,如果大于 0,則此楔形設(shè)置為以當(dāng)前儀表值為中心的指示器
        amounttotal=50, #儀表的最大值,默認(rèn)100
        amountused=10, #儀表的當(dāng)前值
        metersize=200,#儀表大小
        showtext=True, #指示是否在儀表上顯示左、中、右文本標(biāo)簽
        interactive=True, #是否可以手動調(diào)節(jié)數(shù)字的大小
        textleft='左邊', #插入到中心文本左側(cè)的短字符串
        textright='右邊',
        textfont="-size 30", #中間數(shù)字大小
        subtext="文本",
        subtextstyle=DEFAULT,
        subtextfont="-size 20",#文本大小
        ).pack(side=ttk.LEFT, padx=5)
def _():
        meter = ttk.Meter(
                metersize=180,
                padding=50,
                amountused=0,
                metertype="semi",
                subtext="當(dāng)前網(wǎng)速(kB/s)",
                subtext,
                interactive=False,
                bootstyle='primary',
                )
        meter.pack(side=ttk.LEFT, padx=5)
        while True:
                meter.configure(amountused=round(getNet(),2))
def getNet():
    recv_before = psutil.net_io_counters().bytes_recv
    time.sleep(1)
    recv_now = psutil.net_io_counters().bytes_recv
    recv = (recv_now - recv_before)/1024
    return recv

t = threading.Thread(target=_)
t.setDaemon(True)
t.start()
root.mainloop()

進(jìn)度條

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import time,threading
import ttkbootstrap as ttk
from ttkbootstrap.constants import *
root = ttk.Window(size=(500,380))
def _():
    f = ttk.Frame(root).pack(fill=BOTH, expand=YES)
    p1 = ttk.Progressbar(f, bootstyle=PRIMARY)
    p1.place(x=20, y=20, width=380, height=40)
    p1.start() #間隔默認(rèn)為50毫秒(20步/秒)
    p2 = ttk.Progressbar(f, bootstyle=INFO,orient=VERTICAL)
    p2.place(x=200, y=100, width=40, height=200)
    p2.step(10) #步長
    while True:
        for i in range(0,50,5):
            p2.step(i) #以步長i增長
            # p2.stop()#停止
            time.sleep(1)
t = threading.Thread(target=_)
t.setDaemon(True)
t.start()
root.mainloop()

Scale

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import threading,time
import ttkbootstrap as ttk
from ttkbootstrap.constants import *
root = ttk.Window()
ttk.Scale(
    master=root,
    orient=HORIZONTAL,
    value=75,
    from_=0,
    to=100
).pack(fill=X, pady=5, expand=YES)
ttk.Scale(master=root,orient=HORIZONTAL,bootstyle=WARNING,value=75,from_=100,to=0).pack(fill=X, pady=5, expand=YES)
def scale():
    s2 = ttk.Scale(
        master=root,
        bootstyle=SUCCESS,
        orient=VERTICAL,
        value=0,
        from_=100,
        to=0
    )
    s2.pack(fill=X, pady=5, expand=YES)
    for i in range(101):
        s2.configure(value=i)
        time.sleep(0.1)
        # print(s2.get())
t = threading.Thread(target=scale)
t.setDaemon(True)
t.start()
root.mainloop()

水尺

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import ttkbootstrap as ttk
from ttkbootstrap.constants import *
root = ttk.Window()
fg1 = ttk.Floodgauge(
    master=None,
    cursor=None,
    font=None,
    length=None,
    maximum=100,
    mode=DETERMINATE,
    orient=HORIZONTAL,
    bootstyle=PRIMARY,
    takefocus=False,
    text=None,
    value=0,
    mask=None,
)
fg1.pack(side=ttk.LEFT, padx=5)
fg1.start()
fg2 = ttk.Floodgauge(
    master=root,
    boot,
    font=("微軟雅黑",12), #文本字體
    length=100,  #水尺長度
    maximum=10, #增加到10
    mode=INDETERMINATE, #來回不確定
    orient=VERTICAL, #放置垂直方向
    text="文本", #文本
)
fg2.pack(side=ttk.LEFT, padx=5)
fg2.start()
fg3 = ttk.Floodgauge(
    root,
    bootstyle=INFO,
    length=300,
    maximum=200,
    font=("微軟雅黑", 18, 'bold'),
    mask='loading...{}%',
)
fg3.pack(side=ttk.LEFT, padx=5)
fg3.start()
# fg3.stop()
# fg3.configure(mask='...{}%')
fg3.configure(value=25) #初始值
fg3.step(50) #將上面25該值增加50步
root.mainloop()

滾動條

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import ttkbootstrap as ttk
from ttkbootstrap.constants import *
root = ttk.Window(size=(500,200))
f = ttk.Frame(root).pack(fill=BOTH, expand=YES)
text_content = '''
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
'''
# t = ttk.Text(f)
# t.insert("0.0",text_content)
# t.place(x=10,y=10,width=480,height=200)
# sl_x = ttk.Scrollbar(t,orient=HORIZONTAL) #使?jié)L動條水平放置
# #放到窗口的底部, 填充X軸豎直方向
# sl_x.pack(side=ttk.BOTTOM, fill=ttk.X)
# sl_y = ttk.Scrollbar(t,boot) #滾動條默認(rèn)垂直放置
# #放到窗口的右側(cè), 填充Y軸豎直方向
# sl_y.pack(side=ttk.RIGHT, fill=ttk.Y)
# #兩個控件相關(guān)聯(lián)
# sl_x.config(command=t.xview)
# t.config(yscrollcommand=sl_x.set)
# sl_y.config(command=t.yview)
# t.config(yscrollcommand=sl_y.set)

##滾動文本框
from ttkbootstrap.scrolled import ScrolledText
st = ScrolledText(f, padding=5, height=10, autohide=True)
st.pack(fill=BOTH, expand=YES)
st.insert(END, text_content)

root.mainloop()

消息提示框

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import ttkbootstrap as ttk
from ttkbootstrap.dialogs import Messagebox
root = ttk.Window()
print("ok: ",Messagebox.ok(
    message="要在消息框中顯示的消息",
    title="消息框的標(biāo)題",
    alert=False, #指定是否響鈴,默認(rèn)False
))
print("okcancel: ",Messagebox.okcancel(message="確定取消"))
print("retrycancel: ",Messagebox.retrycancel(message="重試取消"))
print("retrycancel: ",Messagebox.show_error(message="顯示錯誤"))
print("retrycancel: ",Messagebox.show_info(message="顯示信息"))
print("retrycancel: ",Messagebox.show_question(message="顯示問題"))
print("retrycancel: ",Messagebox.show_warning(message="顯示警告"))
print("retrycancel: ",Messagebox.yesno(message="是的"))
print("retrycancel: ",Messagebox.yesnocancel(message="是的取消"))
root.mainloop()

查詢框

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import ttkbootstrap as ttk
from ttkbootstrap.dialogs import Querybox
root = ttk.Window()
print("獲取日期:",Querybox.get_date())
print("獲取float型:",Querybox.get_float(
    prompt="請輸入內(nèi)容:",
    title="獲取float型: ",
    initialvalue=666.666, #設(shè)置初始值
    # minvalue=None, 
    # maxvalue=None
))
print("獲取字體:",Querybox.get_font())
print("獲取整數(shù):",Querybox.get_integer())
print("獲取字符串:",Querybox.get_string())
root.mainloop()

子窗口

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import ttkbootstrap as ttk
root = ttk.Window()
root.wm_attributes('-topmost', 1)#讓主窗口置頂
def my():
    ttk.Style("solar")
    #print(ttk.Style().theme_names())#可設(shè)置主題風(fēng)格['cyborg', 'journal', 'darkly', 'flatly', 'solar', 'minty', 'litera', 'united', 'pulse', 'cosmo', 'lumen', 'yeti', 'superhero']
    mytoplevel = ttk.Toplevel(root,alpha=0.5)##里面的參數(shù)和Window()父窗口一致
ttk.Button(text="my_Toplevel ",command=my).pack()
root.mainloop()

菜單

新增,之前總是感覺好像缺了點什么,今天才想起來,哈哈哈?。?!

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import ttkbootstrap as ttk
from ttkbootstrap.dialogs import Messagebox
root = ttk.Window()
# 在窗口上創(chuàng)建一個菜單欄(最上方的菜單欄橫條)
menubar = ttk.Menu(root)
def dianji(): #定義一個點擊事件方法
    Messagebox.show_info(title='走走走!', message='該功能還未開放!')   #消息提示框窗口
# 定義一個豎條
filemenu = ttk.Menu(menubar)
# 在菜單單元中添加一個菜單項File
menubar.add_cascade(label='設(shè)置', menu=filemenu)
# 在設(shè)置菜單項添加命令選項
filemenu.add_command(label='更多', command=dianji)
# 添加一條分割線
filemenu.add_separator()
# 定義一個子菜單條
submenu = ttk.Menu(filemenu)  # 和上面定義菜單一樣,不過此處是在設(shè)置上創(chuàng)建一個空的菜單
submenu.add_command(label="背景")  # 給submenu添加功能選項
submenu.add_command(label="字體")
submenu.add_command(label="大小")
# 添加一個展開下拉菜單,并把上面的子菜單嵌入給它
filemenu.add_cascade(label='個性化', menu=submenu, underline=0)
# 同樣的在File中加入Exit小菜單,此處對應(yīng)命令為window.quit
filemenu.add_command(label='退出', command=root.quit)
# 在頂部再添加多個菜單項
otherfunction = ttk.Menu(menubar)
menubar.add_cascade(label='選擇', menu=otherfunction)
menubar.add_cascade(label='查看', menu=otherfunction)
otherfunction.add_command(label='該功能未開放!')
#幫助
def baidu():
    Messagebox.okcancel(title='baidu.com', message='走走走,自己去百度!')
help = ttk.Menu(menubar, tearoff=0)
menubar.add_cascade(label='幫助', menu=help)
help.add_command(label='help', command=baidu)
# 將菜單配置給窗口
root.config(menu=menubar)

root.mainloop()

面板

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import ttkbootstrap as ttk
from ttkbootstrap.constants import *
root = ttk.Window()
f = ttk.Frame(root)
f.pack(pady=5, fill=X, side=TOP)
nb = ttk.Notebook(f)
nb.pack(
    side=LEFT,
    padx=(10, 0),
    expand=YES,
    fill=BOTH
)
nb_text = "This is a notebook tab.\nYou can put any widget you want here."
nb.add(ttk.Label(nb, text=nb_text), text="Tab 1", sticky=NW)
nb.add(
    child=ttk.Label(nb, text="notebook tab 2."),
    text="Tab 2",
    sticky=NW
)
f2 = ttk.Frame(nb)
ttk.Button(f2,text="notebook button").pack(side=ttk.LEFT, padx=5, pady=10)
nb.add(f2, text='Tab 3')
root.mainloop()

樹視圖

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

import ttkbootstrap as ttk
from ttkbootstrap.constants import *
root = ttk.Window()
tv = ttk.Treeview(
        master=root,
        columns=[0, 1],
        show=HEADINGS,
        height=5
    )
table_data = [
    (1,'one'),
    (2, 'two'),
    (3, 'three'),
    (4, 'four'),
    (5, 'five')
]
for row in table_data:
    tv.insert('', END, values=row)
# print(tv.get_children())#('I001', 'I002', 'I003', 'I004', 'I005')
tv.selection_set('I002')
tv.heading(0, text='ID')
tv.heading(1, text='NAME')
tv.column(0, width=60)
tv.column(1, width=300, anchor=CENTER)
tv.pack(side=LEFT, anchor=NE, fill=X)
root.mainloop()

加載gif動圖

左邊是官網(wǎng)上提供的方法,右邊是一個自己定義的方法。

Python?GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口

from pathlib import Path
from itertools import cycle
import ttkbootstrap as ttk
from ttkbootstrap.constants import *
from PIL import Image, ImageTk, ImageSequence
class AnimatedGif(ttk.Frame):
    def __init__(self, master):
        super().__init__(master, width=400, height=300)

        # open the GIF and create a cycle iterator
        file_path = Path(__file__).parent / "guanwang.gif"
        with Image.open(file_path) as im:
            # create a sequence
            sequence = ImageSequence.Iterator(im)
            images = [ImageTk.PhotoImage(s) for s in sequence]
            self.image_cycle = cycle(images)

            # length of each frame
            self.framerate = im.info["duration"]

        self.img_container = ttk.Label(self, image=next(self.image_cycle))
        self.img_container.pack(fill="both", expand="yes")
        self.after(self.framerate, self.next_frame)

    def next_frame(self):
        """Update the image for each frame"""
        self.img_container.configure(image=next(self.image_cycle))
        self.after(self.framerate, self.next_frame)

def loadingGif(app):
    numIdx = 12  # gif的幀數(shù)
    file_path = Path(__file__).parent / "TestGif.gif"
    frames = [ttk.PhotoImage(file=file_path, format='gif -index %i' % (i)) for i in range(numIdx)]
    def run(rate):
        frame = frames[rate]
        rate += 1
        gif_label.configure(image=frame)  # 顯示當(dāng)前幀的圖片
        gif_label.after(100, run, rate % numIdx)  # 0.1秒(100毫秒)之后繼續(xù)執(zhí)行函數(shù)(run)
    gif_label = ttk.Label(app)
    gif_label.pack(side=LEFT,padx=20,fill=BOTH, expand=YES)
    run(0)
if __name__ == "__main__":
    app = ttk.Window("Animated GIF", themename="litera")
    gif = AnimatedGif(app)
    gif.pack(side=LEFT,padx=20,fill=BOTH, expand=YES)
    loadingGif(app)
    app.mainloop()

打開本地文件

import ttkbootstrap as ttk
from ttkbootstrap.constants import *
from tkinter.filedialog import askopenfilename
root = ttk.Window()
def open_file():
    path = askopenfilename()
    # print(path)
    if not path:
        return
ttk.Button(root, text="打開文件", command=open_file).pack(fill=X, padx=10, pady=10)
root.mainloop()

打開瀏覽器

import ttkbootstrap as ttk
from ttkbootstrap.constants import *
import webbrowser
root = ttk.Window()
def open_url(event):
    webbrowser.open("http://www.baidu.com", new=0)  # 啟動web瀏覽器訪問給定的URL
label = ttk.Label(root,text="https://www.baidu.com/",bootstyle=PRIMARY)
label.pack(fill=BOTH)
label.bind("<Button-1>", open_url)
root.mainloop()

關(guān)于“Python GUI怎么利用tkinter皮膚ttkbootstrap實現(xiàn)好看的窗口”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI