一、給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
微信掃一掃
支付寶掃一掃