【问题标题】:Getting the text from a Listbox item从列表框项中获取文本
【发布时间】:2016-03-10 20:55:55
【问题描述】:

我正在创建一个会话列表并在之后对会话进行腌制。这一点有效,但是当我使用右键单击菜单从列表框中删除会话时,我需要能够从我正在酸洗的列表中删除该项目。

如何获取当前列表框选择中的文本?

这是我的代码:

class Main(self, root)
    def __init__(self):
        self.f2=Frame(root)
        self.f2.grid()
        Label(self.f2, text="Sesion Date:").grid(row=3, column=0)
        self.e=Entry(self.f2)
        self.e.grid(row=3, column=1)
        Button(self.f2, text="Add Session", command=lambda: self.session(client)).grid(row=4, columnspan=2)
        scrollbar=Scrollbar(self.f2)
        self.sessionbox=Listbox(self.f2, yscrollcommand=scrollbar.set)
        self.sessionbox.grid(row=5, columnspan=2)
        self.sessionmenu=Menu(self.sessionbox, tearoff=0)
        self.sessionmenu.add_command(label="Delete", command=lambda: self.deleteSession(client))
        self.sessionbox.bind("<ButtonRelease-2>", self.sessionRightClick)
        scrollbar.config(command=self.sessionbox.yview)

    def session(self, client):
        if len(self.e.get()) == 0: 
            tkMessageBox.showinfo("Add Session", "Please type a session date\nbefore submitting")
    else:
        self.sessionlist=[]
        self.sessionlist.append("%s" % (self.e.get()))
        self.sessionbox.insert(0, "%s" % (self.e.get()))
        with open("sessions", "wb") as f:
            pickle.dump(self.sessionlist, f)
        self.e.delete(0, END)
        self.row1+=1

    def deleteSession(self, client):
        try:
            sel=self.sessionbox.curselection()
            self.sessionbox.delete(sel)
            self.sessionlist.remove()
            with open("sessions", "wb") as f:
                pickle.dump(self.sessionlist, f)
        except:
            tkMessageBox.showerror("Delete Session", "No session selected!")

    def sessionRightClick(self, event):
        self.sessionmenu.post(event.x_root, event.y_root)

root=Tk()
app=Main(root)
root.mainloop()

【问题讨论】:

    标签: python list tkinter listbox pickle


    【解决方案1】:

    如果您想获取 Listbox 的每个项目,那么您可以使用它。请记住,返回的是tuple

    .get(0, tk.END)
    

    如果您想要当前选择的项目,那么您可以使用它。请记住,返回的是 tuple

    .curselection()
    

    但是,这只会为您提供所选项目的索引。要获取文本,只需使用类似这样的东西。使用来自.curselection() 的索引值从整个选择中获取项目

    import tkinter as tk
    
    l_box = tk.Listbox(...)
    all_items = l_box.get(0, tk.END) # tuple with text of all items in Listbox
    sel_idx = l_box.curselection() # tuple with indexes of selected items
    sel_list = [all_items[item] for item in sel_idx] # list with text of all selected items
    

    【讨论】:

    • 错字对不起。固定答案
    【解决方案2】:

    您可以使用以下内容:

    import tkinter as tk
    listbox = tk.listbox(...)
    
    value=listbox.get(listbox.curselection())
    print (value)
    

    【讨论】:

      猜你喜欢
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多