Day18 用python写UI-聊聊Listbox与事件绑定

今天延续昨天的Listbox做一些更进阶的操作,加入删除、项目的排序和拖曳项目,这些都是平常常会用到的。

♠♣今天的文章大纲♥♦

  • 加入和删除
  • 项目排序
  • 拖曳项目

加入和删除

用Entry输入内容,案加入按钮後便会加入Listbox,案删除後就会删除。

import tkinter as tk

root = tk.Tk()
root.title('cuteluluWindow')
root.configure(bg="#7AFEC6")
root.iconbitmap('heart_green.ico')
root.geometry('300x300')

def Added():
    g = entry.get()
    if (len(g.strip()) ==0):
        return
    lb.insert ('end', g)
    entry.delete(0, 'end')

def Deleted():
    index = lb.curselection ()
    if (len (index) == 0):
        return
    lb.delete(index)

entry = tk.Entry(root)
entry.grid(row=0, column=0, padx=5, pady=5)

bAdd = tk.Button (root, text="Add",width=10, command=Added)
bAdd.grid(row=0, column=1, padx=5, pady=5)

lb = tk.Listbox (root)
lb.grid(row=1,column=0,columnspan=2,padx=5,sticky='w')

bDel = tk.Button(root,text="Delete",width=10,command=Deleted)
bDel.grid(row=2,column=0,padx=5,pady=5 ,sticky='w') 

root.mainloop()

执行结果⬇⬇⬇
按Add键
https://ithelp.ithome.com.tw/upload/images/20211003/20140047HNcS4uBe6Z.png
加入项目
https://ithelp.ithome.com.tw/upload/images/20211003/2014004734hWt3hr5z.png
选取项目
https://ithelp.ithome.com.tw/upload/images/20211003/20140047SUck05Myl4.png
按Delete键
https://ithelp.ithome.com.tw/upload/images/20211003/20140047rnnVf7hOSC.png


项目排序

设定要从小到大排或是从大到小排列,执行後可以从选相框去做选择。

import tkinter as tk

root = tk.Tk()
root.title('cuteluluWindow')
root.configure(bg="#7AFEC6")
root.iconbitmap('heart_green.ico')
root.geometry('300x300')

def choise():
    if (var.get() == True):
        revBool=True #小到大排序
    else:
        revBool=False #大到小排序
    listTmp=list (lb.get (0,'end'))
    sl= sorted(listTmp,reverse=revBool) 
    lb.delete(0, 'end')
    for item in sl:
        lb.insert ('end', item)
singers =["Sam Smith", "Of Monsters and Men", "The Cure", "Bruno Mars", "Taylor Swift", "John Legend"]

lb= tk.Listbox (root)
for singer in singers:
    lb.insert ('end', singer)
lb.pack(padx=10, pady = 5)
b = tk.Button(root, text="Sort", command=choise)
b.pack(side = 'left', padx = 10, pady = 5)

var = tk.BooleanVar()
cb = tk.Checkbutton (root, text="小到大", variable=var)
cb.pack(side='left')

root.mainloop()

执行结果⬇⬇⬇
一开始
https://ithelp.ithome.com.tw/upload/images/20211003/20140047Cu0DMPT600.png
大到小
https://ithelp.ithome.com.tw/upload/images/20211003/20140047fEPs8lOfIJ.png
小到大
https://ithelp.ithome.com.tw/upload/images/20211003/20140047hWjeQQlLVG.png


拖曳项目

可以将选项拖曳换位置。

import tkinter as tk

root = tk.Tk()
root.title('cuteluluWindow')
root.configure(bg="#7AFEC6")
root.iconbitmap('heart_green.ico')
root.geometry('300x300')

def get(event):
    lb.index = lb.nearest(event.y)

def choise(event):
    newIndex = lb.nearest(event.y)
    if newIndex < lb.index:
        x=lb.get (newIndex)
        lb.delete(newIndex)
        lb.insert(newIndex+1,x)
        lb.index = newIndex
    elif newIndex > lb.index:
        x = lb.get(newIndex)
        lb.delete(newIndex)
        lb.insert(newIndex-1,x)
        lb.index= newIndex

singers =["Sam Smith", "Of Monsters and Men", "The Cure", "Bruno Mars", "Taylor Swift", "John Legend"]

lb = tk.Listbox(root)

for singer in singers:
    lb.insert ('end', singer)
    lb.bind("<Button-1>",get)
    lb.bind("<B1-Motion>", choise)

lb.pack(padx  = 1 , pady=10)
root.mainloop()

执行结果⬇⬇⬇
点选一个选项
https://ithelp.ithome.com.tw/upload/images/20211003/20140047XKuarQKYET.png
将其拖曳至想要的位置
https://ithelp.ithome.com.tw/upload/images/20211003/201400474aO67nmJbQ.png


Listbox就到今天了,明天会开始讲OptionMenu7部分罗~~~
/images/emoticon/emoticon30.gif


<<:  Day 21 - ESG已经是个不可不知的显学

>>:  Day25 安装 Heartbeat

[python 爬虫] 美金_欧元 半年走势

import matplotlib.pyplot as plt import requests im...

AI ninja project [day 19] 音讯辨识

是这样的,我曾经在新闻上看到说罗东的农夫有种植的西瓜被偷, 我在想除了监视器以外,还有没有甚麽方法可...

day28: Pointfree

今天要来补充 Pointfree 的概念, 这也同样和 pipe 有关。 function 运算的过...

从 IT 技术面细说 Search Console 的 27 组数字 KPI (7) :网页的排除

SEO 要做到基本工是很简单的,就是把 Search Console 上面显示的错误都解决掉,上面说...

《有些观点书,正是因为一生有限》

听《失败的逻辑》这本书後, 我去思考,在这样复杂多变的世界里,多方面讯息冲刷脑袋的我,留心、注意、有...