1. 程式人生 > >python tkinter Listbox用法from tkinter import * root=Tk() v=StringVar() #Listbox與變數繫結' lb1=Listbox(ro

python tkinter Listbox用法from tkinter import * root=Tk() v=StringVar() #Listbox與變數繫結' lb1=Listbox(ro

python tkinter元件的Listbox的用法,見下面程式碼的演示:

from tkinter import *

root=Tk()
v=StringVar()
#Listbox與變數繫結'
lb1=Listbox(root,listvariable=v)
v.set(('10','20','30','40','50'))
print(v.get())
lb1.pack()

#.建立一個可以多選的Listbox,使用屬性selectmaod'
lb2=Listbox(root,selectmode=MULTIPLE)
for item in range(10):
    lb2.insert(END,str(item))
#  有兩個特殊的值ACTIVE和END,ACTIVE是向當前選中的item前插入一個
# (即使用當前選中的索引作為插入位置);END是向
#  Listbox的最後一項新增插入一項

lb2.delete(1,3)
#刪除全部內容,使用delete指定第一個索引值0和最後一個引數END,即可
lb2.pack()

#這個屬性selectmode還可以設定為BROWSE,可以通過滑鼠來移動Listbox中的選中位置
# (不是移動item),
#這個屬性也是Listbox在預設設定的值,這個程式與1.程式執行的結果的一樣的
scrollbar=Scrollbar(root)
scrollbar.pack(side=RIGHT,fill=Y)
lb3=Listbox(root,selectmode=BROWSE,yscrollcommand=scrollbar.set)
for item in range(20):
    lb3.insert(END,str(item))
    lb3.pack(side=LEFT,fill=BOTH)
scrollbar.config(command=lb3.yview)

#將一個垂直方向的Scrollbar和listboxs/canvases/text fields這些控制元件結合起來,
# 你只需要按照下面的步驟即可:
#1.將這些控制元件的yscrollcommand選項設定為scrollbar的set方法。
#2.將scrollbar的command選項設定為這些控制元件的yview方法。

print(lb3.size())
print(lb3.get(3))
print(lb3.get(3,7))
lb3.selection_set(0,10)
lb3.selection_clear(0,3)
lb3.pack()


def printlist(event):
    print(lb4.get(lb4.curselection()))


#使用selectmode  = EXPANDED使用Listbox來支援Shift和Control
lb4=Listbox(root,selectmode=EXTENDED)
lb4.bind('<Double-Button-1>',printlist)
for item in ['python','tkinter','widget']:
    lb4.insert(END,item)
lb4.pack()


root.mainloop()

 

 

 

再來一個例項:

在下面這個例子中,點選Listbox的專案,輸出索引號。

from tkinter import *

class make_list(Listbox):
    def __init__(self,master, **kw):
        frame = Frame(master)
        frame.pack()
        self.build_main_window(frame)

        kw['selectmode'] = SINGLE
        Listbox.__init__(self, master, kw)
        master.bind('<Button-1>', self.click_button)
        master.curIndex = None

    def click_button(self, event):
        ##this block works
        w = event.widget
        index = int(w.curselection()[0])
        value = w.get(index)
        print(value)
        ##this doesn't
        self.curIndex = self.nearest(event.y)
        print(self.curIndex)
        self.curIndex = event.widget.nearest(event.y)
        print(self.curIndex)

    #display the window, calls the listbox
    def build_main_window(self, frame):
        self.build_listbox(frame)

    #listbox
    def build_listbox(self, frame):
        listbox = Listbox(frame)
        for item in ["one", "two", "three", "four"]:
            listbox.insert(END, item)
        listbox.insert(END, "a list entry")
        listbox.pack()
        return

if __name__ == '__main__':
    tk = Tk()
    make_list(tk)
    tk.mainloop()