一、給Listbox賦值
在Tkinter中,使用Listbox展示數據非常簡單,我們可以通過Listbox類創建一個可以顯示列表項的控制項。
from tkinter import * root = Tk() listbox = Listbox(root,width=50) for item in ['apple','banana','watermelon']: listbox.insert(END,item) listbox.pack() root.mainloop()
首先創建一個可以容納Listbox的窗口對象,然後通過Listbox類創建一個Listbox控制項;接著,通過循環遍歷一組數據,將數據插入到Listbox框中,最後調用pack方法將框中的數據顯示,這個時候,一個簡單的列表就創建完成了。
二、交互功能:選擇、刪除列表項
當展示數據已經不再是我們的目標,我們還需要與這些數據進行交互操作,比如選擇、刪除等等。在Tkinter中,我們可以輕鬆的完成這些操作。
要選擇列表中的一項,只需要在創建時設置好該控制項的selectmode選項即可。該屬性有四個參數:
- SINGLE:表示只能選中一個選項。
- BROWSE:和SINGLE一樣,都只能選中一個選項,但是通過滑鼠拖動某個選項時,可以更改選中的項。
- MULTIPLE:表示可以選中多個選項,但是不能用滑鼠拖動來多選。
- EXTENDED:表示可以多選,而且可以用滑鼠拖動來選中多個選項。
對於刪除,可以定義一個函數來實現。在該函數內部,我們先獲取選擇的項,然後刪除。
def delete_item(self): try: current_item = self.listbox.curselection() self.listbox.delete(current_item) except EXCEPTION as e: pass
在上述代碼中,使用curselection()方法獲取當前選擇的項,如果有選擇的項,則調用delete()方法刪除該項,並在異常處理時忽略之。
三、交互功能:更新列表項
修改列表項和刪除列表項實現起來相差不大,在此就不贅述,相比之下,更新列表項可能讓人有些頭疼。但我們可以使用curselection()方法在列表中查找到相應的位置,調用insert()方法插入即可。
def update_item(self): try: current_item = self.listbox.curselection() self.listbox.insert(current_item, self.entry.get()) self.listbox.delete(current_item) except EXCEPTION as e: pass
以上代碼中,使用curselection()方法獲取當前選擇的項,接著通過insert()方法在該選項之前插入一個新的元素,並調用delete()方法刪除原來的選擇。
四、完整例子
以下是一個完整的例子,來完整地展示Listbox的可交互功能,包括選擇、刪除和更新功能:
from tkinter import * class ListBoxDemo(): def __init__(self): self.root = Tk() self.listbox = Listbox(self.root, selectmode=SINGLE) self.listbox.bind("",self.update_item) self.listbox.pack(padx=10,pady=10) self.items = ['apple','banana','watermelon'] self.insert_items_to_listbox() self.create_button() self.create_entry() self.root.mainloop() def insert_items_to_listbox(self): for item in self.items: self.listbox.insert(END,item) def create_button(self): entry_frame = Frame(self.root) delete_button = Button(entry_frame,text='Delete',command=self.delete_item) delete_button.pack(side=LEFT,padx=10) update_button = Button(entry_frame,text='Update',command=self.update_item) update_button.pack(side=LEFT) entry_frame.pack(side=TOP) def create_entry(self): self.entry = Entry(self.root,width=50) self.entry.pack(pady=10) def delete_item(self): try: current_item = self.listbox.curselection() self.listbox.delete(current_item) except EXCEPTION as e: pass def update_item(self,event): try: current_item = self.listbox.curselection() item_text = self.listbox.get(current_item) self.entry.insert(END,item_text) self.listbox.delete(current_item) except EXCEPTION as e: pass app=ListBoxDemo()
原創文章,作者:PDYV,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/144885.html