Python之tkinter列表框Listbox與滾動(dòng)條Scrollbar解讀
列表框Listbox簡(jiǎn)介
列表框(Listbox)是一個(gè)顯示一系列選項(xiàng)的Widget控件,用戶可以進(jìn)行單項(xiàng)或多項(xiàng)的選擇
使用格式如下:
Listbox(父對(duì)象, options, ...)
參數(shù):
- 第一個(gè)參數(shù):父對(duì)象,表示這個(gè)列表框?qū)⒔⒃谀囊粋€(gè)窗口內(nèi)
- 第二個(gè)參數(shù):
options
,參數(shù)如下
參數(shù) | 含義 |
---|---|
borderwidth | 邊界寬度默認(rèn)是兩個(gè)像素 |
bd | 邊界寬度默認(rèn)是兩個(gè)像素 |
background | 背景色彩 |
bg | 背景色彩 |
cursor | 當(dāng)鼠標(biāo)光標(biāo)移至列表框上時(shí)的形狀 |
foreground | 前景色彩 |
fg | 前景色彩 |
font | 字形 |
height | 高,單位是字符,默認(rèn)是10 |
highlightcolor | 當(dāng)列表框取得焦點(diǎn)時(shí)的顏色 |
highlightthinckness | 當(dāng)列表框取得焦點(diǎn)時(shí)的厚度 |
listvariable | 以變量方式處理選項(xiàng)內(nèi)容 |
relief | 可由此控制列表框外框默認(rèn)是SUNKEN |
selectbackground | 被選取字符串的背景色彩 |
selectmode | 可以決定有多少個(gè)選項(xiàng)可以被選,以及鼠標(biāo)拖拽如何影響選項(xiàng) |
width | 寬,單位是字符寬 |
xscrollcommand | 在X軸使用滾動(dòng)條 |
yscrollcommand | 在Y軸使用滾動(dòng)條 |
selectmode的參數(shù)
參數(shù) | 含義 |
---|---|
BROWSE | 這是默認(rèn)值,我們可以選擇一個(gè)選項(xiàng),如果選取一個(gè)選項(xiàng)同時(shí)拖拽鼠標(biāo),將造成選項(xiàng)最后的位置是被選取的項(xiàng)目位置 |
SINGLE | 只能選擇一個(gè)選項(xiàng),可以用單擊方式選取,不可用拖拽方式更改所選的項(xiàng)目 |
MULTIPLE | 可以選擇多個(gè)選項(xiàng),單擊項(xiàng)目可以切換是否選擇該項(xiàng)目 |
EXTENDED | 單擊第一個(gè)項(xiàng)目然后拖拽到最后一個(gè)項(xiàng)目,即可選擇這個(gè)區(qū)間的一系列選項(xiàng)。單擊可以選擇第一個(gè)項(xiàng)目,此時(shí)若是按住Shift鍵并單擊另一個(gè)項(xiàng)目,可以選取區(qū)間項(xiàng)目 |
Listbox 的初步應(yīng)用
例子:
import tkinter root = tkinter.Tk() root.geometry("300x180") # 建立listbox1 listbox1 = tkinter.Listbox(root) listbox1.pack(side=tkinter.LEFT, padx=5, pady=5) # 建立listbox2 listbox2 = tkinter.Listbox(root, height=5, relief='raised') listbox2.pack(anchor=tkinter.N, side=tkinter.LEFT, padx=5, pady=5) root.mainloop()
運(yùn)行結(jié)果:
建立列表框項(xiàng)目 insert()
可以使用insert()方法為列表框建立項(xiàng)目,這個(gè)方法的使用格式如下
insert(index, elements)
參數(shù):
- 第一個(gè)參數(shù):
父index
,是項(xiàng)目插入的位置,如果是插在最后面可以使用END - 第二個(gè)參數(shù):
elements
,插入的字符串
例子:
import tkinter root = tkinter.Tk() # 建立listbox1 listbox1 = tkinter.Listbox(root) listbox1.pack(padx=5, pady=5) # 插入的位置與信息 listbox1.insert(tkinter.END, 'abc') listbox1.insert(tkinter.END, '123') listbox1.insert(tkinter.END, '!$#') root.mainloop()
運(yùn)行結(jié)果:
其實(shí)也可以這樣
listbox1.insert(tkinter.END, 'abc', '123', '!$#')
運(yùn)行結(jié)果也是一樣的
如果有很多的項(xiàng)目需要插入,我們可以使用循環(huán)的方式來(lái)進(jìn)行
例子:
import tkinter root = tkinter.Tk() foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓'] # 建立listbox1 listbox1 = tkinter.Listbox(root) listbox1.pack(padx=5, pady=5) # 插入的位置與信息 for food in foods: listbox1.insert(tkinter.END, food) root.mainloop()
運(yùn)行結(jié)果:
例子:
重新設(shè)計(jì)程序,使列表框可以多選
import tkinter root = tkinter.Tk() foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓'] # 建立listbox1 listbox1 = tkinter.Listbox(root, selectmode=tkinter.MULTIPLE) listbox1.pack(padx=5, pady=5) # 插入的位置與信息 for food in foods: listbox1.insert(tkinter.END, food) root.mainloop()
運(yùn)行結(jié)果:
例子:
重新設(shè)計(jì),單擊一個(gè)項(xiàng)目,按住Shift可以選擇一個(gè)區(qū)間內(nèi)的項(xiàng)目
import tkinter root = tkinter.Tk() foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓'] # 建立listbox1 listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED) listbox1.pack(padx=5, pady=5) # 插入的位置與信息 for food in foods: listbox1.insert(tkinter.END, food) root.mainloop()
運(yùn)行結(jié)果:
前面是單擊并拖拽,后面是使用Shift鍵選擇一個(gè)區(qū)間內(nèi)的項(xiàng)目
使用insert(ACTIVE, elements)
,表示是在目前選項(xiàng)前面加入一個(gè)項(xiàng)目,如果尚未選擇選項(xiàng)則此ACTIVE是0
例子:
使用ACTIVE
import tkinter root = tkinter.Tk() foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子'] # 建立listbox1 listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED) listbox1.pack(padx=5, pady=5) # 插入的位置與信息 for food in foods: listbox1.insert(tkinter.END, food) listbox1.insert(tkinter.ACTIVE, '豆皮', '牛肉面', '湯圓') root.mainloop()
運(yùn)行結(jié)果:
顯示已經(jīng)在最上面了,也就是一次性在最上面插入了三個(gè)項(xiàng)目
Listbox的基本操作
下面是一些常用的Listbox 控件操作的方法
操作方法 | 含義 |
---|---|
size() | 傳回列表項(xiàng)目的數(shù)量 |
selection_set() | 選取特定索引項(xiàng) |
delete() | 刪除特定索引項(xiàng) |
get() | 傳回指定索引項(xiàng) |
curselection() | 傳回選取項(xiàng)目的索引 |
selection_include() | 檢查指定索引是否被選取 |
列出列表框的選項(xiàng)數(shù)量 size()
例子:
import tkinter root = tkinter.Tk() foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓'] # 建立listbox1 listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED) listbox1.pack(padx=5, pady=5) # 插入的位置與信息 for food in foods: listbox1.insert(tkinter.END, food) print('數(shù)量是:', listbox1.size()) root.mainloop()
運(yùn)行結(jié)果:
數(shù)量是: 12
選取特定索引項(xiàng) selection_set()
如果selection_set() 方法內(nèi)含一個(gè)參數(shù),表示選取這個(gè)索引項(xiàng),這個(gè)功能常被用于在建立Listbox 后,設(shè)定初次選擇的項(xiàng)目,通俗易懂的說(shuō),就是一進(jìn)去默認(rèn)選的是哪一個(gè)
例子:
import tkinter root = tkinter.Tk() foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓'] # 建立listbox1 listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED) listbox1.pack(padx=5, pady=5) # 插入的位置與信息 for food in foods: listbox1.insert(tkinter.END, food) # 這里設(shè)置默認(rèn)選定的索引項(xiàng) listbox1.select_set(1) root.mainloop()
運(yùn)行結(jié)果:
如果設(shè)置兩個(gè)索引值,就表示選取區(qū)間選項(xiàng),第一個(gè)參數(shù)是起始索引項(xiàng),第二個(gè)參數(shù)是區(qū)間的結(jié)束索引項(xiàng)
例子:
import tkinter root = tkinter.Tk() foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓'] # 建立listbox1 listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED) listbox1.pack(padx=5, pady=5) # 插入的位置與信息 for food in foods: listbox1.insert(tkinter.END, food) # 這里設(shè)置默認(rèn)選定的索引項(xiàng) listbox1.select_set(1, 3) root.mainloop()
運(yùn)行結(jié)果:
刪除特定索引項(xiàng)
如果delete() 方法內(nèi)含一個(gè)參數(shù),表示刪除這個(gè)索引項(xiàng)
例子
import tkinter root = tkinter.Tk() foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓'] # 建立listbox1 listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED) listbox1.pack(padx=5, pady=5) # 插入的位置與信息 for food in foods: listbox1.insert(tkinter.END, food) # 這里設(shè)置刪除選定的索引項(xiàng) listbox1.delete(0) root.mainloop()
運(yùn)行結(jié)果:
可以很自然的看到“熱干面”選項(xiàng)已經(jīng)不見(jiàn)了
如果delete() 有兩個(gè)參數(shù)是,表示選取區(qū)間選項(xiàng),第一個(gè)參數(shù)是區(qū)間的起始索引項(xiàng),第二個(gè)參數(shù)是區(qū)間的結(jié)束索引項(xiàng)
例子:
import tkinter root = tkinter.Tk() foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓'] # 建立listbox1 listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED) listbox1.pack(padx=5, pady=5) # 插入的位置與信息 for food in foods: listbox1.insert(tkinter.END, food) # 這里設(shè)置刪除選定的索引項(xiàng) listbox1.delete(0, 1) root.mainloop()
運(yùn)行結(jié)果:
可以看到“熱干面、擔(dān)擔(dān)面”兩個(gè)選項(xiàng)已經(jīng)刪除了
傳回指定的索引項(xiàng) get()
如果get() 方法內(nèi)含一個(gè)參數(shù),表示傳回這個(gè)索引項(xiàng)的元素內(nèi)容
例子:
import tkinter root = tkinter.Tk() foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓'] # 建立listbox1 listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED) listbox1.pack(padx=5, pady=5) # 插入的位置與信息 for food in foods: listbox1.insert(tkinter.END, food) print(listbox1.get(1)) root.mainloop()
運(yùn)行結(jié)果:
擔(dān)擔(dān)面
如果在get() 方法內(nèi)有兩個(gè)參數(shù),則表示傳回區(qū)間選項(xiàng),第一個(gè)參數(shù)是區(qū)間的起始索引項(xiàng),第二個(gè)參數(shù)是區(qū)間的結(jié)束索引項(xiàng),傳回的值用元組方式傳回
例子:
import tkinter root = tkinter.Tk() foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓'] # 建立listbox1 listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED) listbox1.pack(padx=5, pady=5) # 插入的位置與信息 for food in foods: listbox1.insert(tkinter.END, food) print(listbox1.get(1, 3)) root.mainloop()
運(yùn)行結(jié)果:
('擔(dān)擔(dān)面', '炸醬面', '面窩')
傳回所選取項(xiàng)目的索引 curselection()
注意!注意!是索引,不是索引項(xiàng)
例子:
import tkinter def show(): index = listbox1.curselection() print(index) root = tkinter.Tk() foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓'] # 建立listbox1 listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED) listbox1.pack(padx=5, pady=5) # 插入的位置與信息 for food in foods: listbox1.insert(tkinter.END, food) button = tkinter.Button(root, text='print', command=show) button.pack() root.mainloop()
運(yùn)行結(jié)果:
我們可以結(jié)合get() 方法使用
例子:
def show(): index = listbox1.curselection() for i in index: print(listbox1.get(i))
運(yùn)行結(jié)果:
檢查指定索引項(xiàng)是否被選取 selection_includes()
如果指定索引項(xiàng)被選取會(huì)傳回True,否則傳回False
例子:
import tkinter def show(): # 檢查第二個(gè)選項(xiàng)有無(wú)被選取 print(listbox1.select_includes(1)) root = tkinter.Tk() foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓'] # 建立listbox1 listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED) listbox1.pack(padx=5, pady=5) # 插入的位置與信息 for food in foods: listbox1.insert(tkinter.END, food) button = tkinter.Button(root, text='print', command=show) button.pack() root.mainloop()
運(yùn)行結(jié)果:
Listbox與事件綁定
虛擬綁定應(yīng)用于單選
當(dāng)Listbox執(zhí)行選取操作時(shí)會(huì)產(chǎn)生<<ListboxSelection>>
虛擬事件,可以由此設(shè)置事件處理程序
例子:
import tkinter def show(event): # 取得事件對(duì)象object object = event.widget # 取得所選的項(xiàng)目索引 index = object.curselection() # 由索引取得所選的項(xiàng)目,關(guān)聯(lián)到label中 var.set(object.get(index)) root = tkinter.Tk() foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){'] # 顯示區(qū) var = tkinter.StringVar() label = tkinter.Label(root, textvariable=var) label.pack(pady=5) # 列表框 lb = tkinter.Listbox(root) for i in foods: lb.insert(tkinter.END, i) lb.bind("<<ListboxSelect>>", show) lb.pack(pady=5) root.mainloop()
運(yùn)行結(jié)果:
單擊Listbox中選項(xiàng)時(shí)會(huì)產(chǎn)生虛擬的<<ListboxSelection>>
事件,此時(shí)可以觸發(fā)itemChanged()
方法處理此事件
其實(shí)可以省略第四行,直接使用原先的Listbox對(duì)象也可以
例子:
def show(event): # 取得所選的項(xiàng)目索引 index = lb.curselection() # 由索引取得所選的項(xiàng)目,關(guān)聯(lián)到label中 var.set(lb.get(index))
運(yùn)行結(jié)果是一樣的
或者我們不使用虛擬綁定,直接簡(jiǎn)單粗魯?shù)氖褂脝螕暨x項(xiàng),也行
例子:
lb.bind("<Button-1>", show)
運(yùn)行結(jié)果是一樣的!
注意:這種方式pycharm會(huì)報(bào)錯(cuò),但是依舊可以運(yùn)行!
虛擬綁定應(yīng)用于多選
例子:
import tkinter def show(event): object = event.widget indexs = object.curselection() for index in indexs: print(object.get(index)) print('------------') root = tkinter.Tk() foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){'] # 列表框 lb = tkinter.Listbox(root, selectmode=tkinter.EXTENDED) for i in foods: lb.insert(tkinter.END, i) lb.bind("<<ListboxSelect>>", show) lb.pack(pady=5) root.mainloop()
運(yùn)行結(jié)果:
活用加入和刪除項(xiàng)目
例子:
import tkinter def add(): varAdd = entry.get() if (len(varAdd.strip())) == 0: return listbox.insert(tkinter.END, varAdd) entry.delete(0, tkinter.END) def delete(): index = listbox.curselection() if len(index) == 0: return listbox.delete(index) root = tkinter.Tk() # 輸入框 entry = tkinter.Entry(root) entry.grid(row=0, column=0, padx=5, pady=5) # 增加按鈕 buttonAdd = tkinter.Button(root, text='增加', width=10, command=add) buttonAdd.grid(row=0, column=1, padx=5, pady=5) # 列表顯示框 listbox = tkinter.Listbox(root) listbox.grid(row=1, column=0, padx=5, pady=5) # 刪除按鈕 buttonDelete = tkinter.Button(root, text='刪除', width=10, command=delete) buttonDelete.grid(row=1, column=1, padx=5, pady=5, sticky=tkinter.N) root.mainloop()
運(yùn)行結(jié)果:
Listbox 項(xiàng)目的排序
例子:
import tkinter def show(): # 獲取復(fù)選框是否勾選的值,如果勾選,值為T(mén)rue if var.get(): # 定義排序的變量 rebBool = True else: rebBool = False # 把我們列表框的幾個(gè)值獲取并轉(zhuǎn)換成列表,方便排序 listTem = list(listbox.get(0, tkinter.END)) # 排序 sortedList = sorted(listTem, reverse=rebBool) # 刪除之前存在的列表框的值 listbox.delete(0, tkinter.END) # 重新插入我們排序好的列表框的值 for i in sortedList: listbox.insert(tkinter.END, i) root = tkinter.Tk() foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){'] listbox = tkinter.Listbox(root) for food in foods: listbox.insert(tkinter.END, food) listbox.pack(padx=10, pady=5) # 創(chuàng)建排序按鈕 button = tkinter.Button(root, text='排序', command=show) button.pack(side=tkinter.LEFT, padx=10, pady=5) var = tkinter.BooleanVar() cheakbutton = tkinter.Checkbutton(root, text='從大到小排序', variable=var) cheakbutton.pack(side=tkinter.LEFT) root.mainloop()
運(yùn)行結(jié)果:
拖拽 Listbox 中的項(xiàng)目
例子:
import tkinter # 處理單擊選項(xiàng) def show(event): # nearest可以傳回最接近y坐標(biāo)在Listbox的索引 # 傳回目前選項(xiàng)的索引 listbox.index = listbox.nearest(event.y) # 處理拖拽選項(xiàng) def showInfo(event): # 獲取目前選項(xiàng)的新索引 newIndex = listbox.nearest(event.y) # 判斷,如果向上拖拽 if newIndex < listbox.index: # 獲取新位置的內(nèi)容 x = listbox.get(newIndex) # 刪除新內(nèi)容 listbox.delete(newIndex) # 將新內(nèi)容插入,相當(dāng)于插入我們移動(dòng)后的位置 listbox.insert(newIndex + 1, x) # 把需要移動(dòng)的索引值變成我們所希望的索引,達(dá)到了移動(dòng)的目的 listbox.index = newIndex elif newIndex > listbox.index: # 獲取新位置的內(nèi)容 x = listbox.get(newIndex) # 刪除新內(nèi)容 listbox.delete(newIndex) # 將新內(nèi)容插入,相當(dāng)于插入我們移動(dòng)后的位置 listbox.insert(newIndex - 1, x) # 把需要移動(dòng)的索引值變成我們所希望的索引,達(dá)到了移動(dòng)的目的 listbox.index = newIndex root = tkinter.Tk() foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){'] listbox = tkinter.Listbox(root) for food in foods: listbox.insert(tkinter.END, food) listbox.bind('<Button-1>', show) listbox.bind('<B1-Motion>', showInfo) listbox.pack(padx=10, pady=5) root.mainloop()
運(yùn)行結(jié)果:
程序中用到的方法
nearest(event.y)
上述代碼行,可以傳回最接近y坐標(biāo)在Listbox中的索引。當(dāng)有單擊操作時(shí)會(huì)觸發(fā)getIndex()
方法,第4行可以傳回目前選項(xiàng)的索引,在拖拽過(guò)程中會(huì)觸發(fā)gragJob()
方法,在第7行可以傳回新選項(xiàng)的索引,因?yàn)樵谕献н^(guò)程中,這個(gè)方法會(huì)不斷的被觸發(fā),所以至于被觸發(fā)多少次視移動(dòng)速度而定
假如移動(dòng)擔(dān)擔(dān)面,它的索引是1, 咱們向下拖拽,整個(gè)流程如下
- 新索引位置為2
- 獲得索引內(nèi)容 ‘面窩’,參照第27行
- 刪除新內(nèi)容 ‘面窩’,參照第29行
- 將 ‘面窩’ 內(nèi)容插入在索引1的位置,相當(dāng)于插入到我們移動(dòng)前的位置,參照第31行
- 這個(gè)時(shí)候把新的索引位置傳給 ‘擔(dān)擔(dān)面’ ,根據(jù)索引來(lái)變換位置,變成了2,這樣就達(dá)到了移動(dòng)的目的了,參照第33行
滾動(dòng)條的設(shè)計(jì)
在默認(rèn)環(huán)境中Listbox 是沒(méi)有滾動(dòng)條的,但是如果選項(xiàng)太多,將造成部分選項(xiàng)無(wú)法顯示,可以將滾動(dòng)條Scrollbar控件加入Listbox中
注:Scrollbar控件除了可以應(yīng)用在Listbox上,也可以應(yīng)用在Text和Canvas上
使用格式如下:
Scrollbar(父對(duì)象, options, ...)
參數(shù):
- 第一個(gè)參數(shù):父對(duì)象,表示這個(gè)滾動(dòng)條將建立在哪一個(gè)窗口內(nèi)
- 第二個(gè)參數(shù):
options
,參數(shù)如下
參數(shù) | 含義 |
---|---|
activebackground | 當(dāng)光標(biāo)經(jīng)過(guò)滾動(dòng)條時(shí),滾動(dòng)條和方向箭頭的顏色 |
bg 或 background | 當(dāng)光標(biāo)沒(méi)有經(jīng)過(guò)滾動(dòng)條時(shí),滾動(dòng)條和方向箭頭的顏色 |
bd 或 borderwidth | 邊界寬度默認(rèn)是兩個(gè)像素 |
command | 滾動(dòng)條移動(dòng)時(shí)所觸發(fā)的方法 |
cursor | 當(dāng)鼠標(biāo)光標(biāo)在滾動(dòng)條上時(shí)的形狀 |
highlightbackground | 當(dāng)滾動(dòng)條沒(méi)有獲得焦點(diǎn)時(shí)的顏色 |
highlightcolor | 當(dāng)滾動(dòng)條取得焦點(diǎn)時(shí)的顏色 |
highlightthinckness | 當(dāng)取得焦點(diǎn)時(shí)的厚度默認(rèn)是1 |
jump | 每次短距離的拖拽滾動(dòng)條時(shí)都會(huì)觸發(fā)command的方法如果設(shè)為1,則只有放開(kāi)鼠標(biāo)按鍵時(shí),才會(huì)觸發(fā)command的方法默認(rèn)是0 |
orient | 可設(shè)置HORIZONTAL/VERTICAL,分別是水平軸/垂直軸 |
repeatdelay | 可以設(shè)置按住滾動(dòng)條移動(dòng)的停滯時(shí)間單位是ms默認(rèn)是300ms |
takefocus | 正常可以用Tab鍵的方式切換滾動(dòng)條成為焦點(diǎn)如果設(shè)置為0,則取消此設(shè)置 |
troughcolor | 滾動(dòng)條槽的顏色 |
width | 寬,單位是字符寬 |
例子:
import tkinter root = tkinter.Tk() sc = tkinter.Scrollbar(root) sc.pack(side=tkinter.RIGHT, fill=tkinter.Y) # 列表動(dòng),滾動(dòng)條跟著動(dòng) lb = tkinter.Listbox(root, yscrollcommand=sc.set) for i in range(50): lb.insert(tkinter.END, "列表 " + str(i)) lb.pack(side=tkinter.LEFT, fill=tkinter.BOTH, expand=True) # 滾動(dòng)條動(dòng),列表跟著動(dòng) sc.config(command=lb.yview) root.mainloop()
運(yùn)行結(jié)果:
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
我的快遞一個(gè)月沒(méi)動(dòng)靜于是趕緊上線python快遞查詢系統(tǒng)
我的快遞在路上走了一個(gè)月還沒(méi)到,于是自己編寫(xiě)快遞查詢,文中通過(guò)實(shí)例代碼截圖的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-09-09利用Python代碼實(shí)現(xiàn)模擬動(dòng)態(tài)指針時(shí)鐘
這篇文章主要為大家詳細(xì)介紹了如何利用python和C++代碼實(shí)現(xiàn)模擬動(dòng)態(tài)指針時(shí)鐘,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-04-04利用python實(shí)現(xiàn)冒泡排序算法實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于如何利用python實(shí)現(xiàn)冒泡排序算法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12python自動(dòng)化測(cè)試實(shí)例解析
這篇文章主要介紹了python自動(dòng)化測(cè)試實(shí)例,并對(duì)實(shí)例中的注意點(diǎn)進(jìn)行了簡(jiǎn)單的分析,需要的朋友可以參考下2014-09-09python腳本框架webpy模板賦值實(shí)現(xiàn)
這篇文章主要為大家介紹了python腳本框架webpy模板賦值實(shí)現(xiàn)示例過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11python中的elasticsearch_dsl查詢語(yǔ)句轉(zhuǎn)換成es查詢語(yǔ)句詳解
這篇文章主要介紹了python中的elasticsearch_dsl查詢語(yǔ)句轉(zhuǎn)換成es查詢語(yǔ)句詳解,ElasticSearch在實(shí)際生產(chǎn)里通常和LogStash,Kibana,F(xiàn)ileBeat一起構(gòu)成Elastic?Stack來(lái)使用,它是這些組件里面最核心的一個(gè),需要的朋友可以參考下2023-07-07Python數(shù)組拼接np.concatenate實(shí)現(xiàn)過(guò)程
這篇文章主要介紹了Python數(shù)組拼接np.concatenate實(shí)現(xiàn)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04Python字符串、整數(shù)、和浮點(diǎn)型數(shù)相互轉(zhuǎn)換實(shí)例
今天小編就為大家分享一篇Python字符串、整數(shù)、和浮點(diǎn)型數(shù)相互轉(zhuǎn)換實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08Python Docx庫(kù)完美操作word文檔實(shí)例探究
這篇文章主要為大家介紹了Python Docx庫(kù)完美操作word文檔,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01基于Python實(shí)現(xiàn)nc批量轉(zhuǎn)tif格式
做項(xiàng)目有時(shí)會(huì)運(yùn)用到netCDF格式的氣象數(shù)據(jù),而ArcGIS中需要用柵格影像進(jìn)行處理,對(duì)于較多的文件,ArcGIS一個(gè)個(gè)手動(dòng)轉(zhuǎn)換過(guò)于繁瑣,因此我們采用Python進(jìn)行轉(zhuǎn)換,下面就是Python實(shí)現(xiàn)nc批量轉(zhuǎn)tif格式的示例代碼,希望對(duì)你有所幫助2022-08-08