Проблемы в Python при получении нескольких выборов из списка Tkinter

Это та же проблема, которую я поставил ранее сегодня, и с которой некоторые из вас пытались мне помочь, но я не могу заставить ее работать. Все, что я хочу сделать, это заполнить "ichose" несколькими вариантами, которые я делаю, когда нажимаю на список.

import Tkinter as tk
from Tkinter import *
global ichose

class App(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self,master)
        self.master=master
        self.grid()
        self.ichose = ()

        self.l = Listbox(self, height=10, selectmode=EXTENDED)
        # Selectmode can be SINGLE, BROWSE, MULTIPLE or EXTENDED. Default BROWSE
        self.l.grid(column=0, row=0, sticky=(N,W,E,S))
        self.l.bind("Double-Button-1", self.entered)

        s = Scrollbar(self, orient=VERTICAL, command=self.l.yview)
        s.grid(column=0, row=0, sticky=(N,S,E))
        self.l['yscrollcommand'] = s.set

        for i in range(1,101):
            self.l.insert('end', 'Line %d of 100' % i)


    def entered(self, event):
        self.ichose = self.selection_get()
        self.ichose = ('hello')

root=tk.Tk()
root.title('Listbox Problem')
root.geometry('200x200')
app=App(root)
root.mainloop()

print app.ichose

Что бы я ни делал, "ichose" выглядит как пустой кортеж (). Понятно, что функция "enter" никогда не вызывается, потому что я никогда не вижу тестовую строку "hello".

Я также не знаю, какие есть различные варианты, такие как "Двойная кнопка-", "<>" и т. Д. Где я могу найти список и объяснение каждого из них?

Если бы кто-то мог, пожалуйста, просто изменить мою программу так, чтобы "print ichose" работал, я был бы очень благодарен. Из моей программы видно, что я действительно не знаю, что делаю, но хочу учиться. Спасибо.

2 ответа

Я наконец нашел ответ на свой вопрос. Это ДЕЙСТВИТЕЛЬНО полезно, если вы хотите получить несколько ответов из списка. Я много комментировал. Надеюсь, поможет!

import Tkinter as tk
from Tkinter import *

class App(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self,master)
        self.master=master
        self.grid()
        self.ichose = []

        self.l = Listbox(self, height=10, selectmode=MULTIPLE)
        # Selectmode can be SINGLE, BROWSE, MULTIPLE or EXTENDED. Default BROWSE
        self.l.grid(column=0, row=0, sticky=(N,W,E,S))

        s = Scrollbar(self, orient=VERTICAL, command=self.l.yview)
        s.grid(column=0, row=0, sticky=(N,S,E))
        self.l['yscrollcommand'] = s.set

        for i in range(1,101):
            self.l.insert('end', 'Line %d of 100' % i)

        # Create Textbox that will display selected items from list
        self.selected_list = Text(self,width=20,height=10,wrap=WORD)
        self.selected_list.grid(row=12, column=0, sticky=W)        

        # Now execute the poll() function to capture selected list items
        self.ichose = self.poll()

    def poll(self):
        items =[]
        self.ichose = []
        # Set up an automatically recurring event that repeats after 200 millisecs
        self.selected_list.after(200, self.poll)
        # curselection retrieves the selected items as a tuple of strings. These
        # strings are the list indexes ('0' to whatever) of the items selected.
        # map applies the function specified in the 1st parameter to every item
        # from the 2nd parameter and returns a list of the results. So "items"
        # is now a list of integers
        items = map(int,self.l.curselection())

        # For however many values there are in "items":
        for i in range(len(items)):
            # Use each number as an index and get from the listbox the actual
            # text strings corresponding to each index, and append each to
            # the list "ichose".
            self.ichose.append(self.l.get(items[i]))
        # Write ichose to the textbox to display it.
        self.update_list()
        return self.ichose

    def update_list(self):
        self.selected_list.delete(0.0, END)
        self.selected_list.insert(0.0, self.ichose)


root=tk.Tk()
root.title('Listbox Multi-Capture')
root.geometry('200x340')
app=App(root)
root.mainloop()

print app.ichose
# ----------------[ Listbox EXAMPLE ]----------------

    self.sarcCountries = (
        "Bangladesh",
        "India",
        "Pakistan",
        "Nepal",
        "Bhutan",
        "Sri Lanka",
        "Afghanistan"
    )

    self.listData = StringVar(value = self.sarcCountries)

    self.listbox = Listbox(
        master           = self,
        height           = 10,
        listvariable     = self.listData,
        selectmode       = MULTIPLE,
        selectbackground = "#BC80CC"
    )

    self.listbox.bind("<<ListboxSelect>>", self.OnListboxSelectionChanged)

    self.listbox.pack(fill = BOTH, expand = 0, padx = 10, pady = 10)
# ----------------[ Listbox EXAMPLE ]----------------


def OnListboxSelectionChanged(self, val):
    # NOTE: If your listbox's select mode is MULTIPLE, then you may use this portion of code
    selections = val.widget.curselection()

    print("---------------------------")

    if (selections != ()):
        for index in selections:
            print(self.sarcCountries[int(index)])

    print("---------------------------")
Другие вопросы по тегам