如何限制tkinter列表框中的选择数量?

时间:2015-02-13 12:05:00

标签: python tkinter

说我有一段这样的代码:

from tkinter import *

master=Tk()

ListBox1 = Listbox(master, selectmode=MULTIPLE)

for Count in range(0, 5):
    ListBox1.insert(END, Count)

ListBox1.pack()

我想知道是否可以将所选对象的数量限制为3或4之类。快速谷歌搜索和listbox的配置选项的读取没有产生任何结果,坦率地说我'我们很难知道如何才能取得这些成果。

2 个答案:

答案 0 :(得分:2)

是的,这是可能的。您可以完全控制列表框中选择的内容。但是,没有任何内置支持这一点,因此您必须编写跟踪选择的所有代码,并禁止根据某些条件更改选择。这可能会造成非常混乱的用户体验,因为用户无法知道这个看起来像标准的列表框有非标准行为。

答案 1 :(得分:0)

所以我今天再次回顾了这个问题,最后为它写了一个解决方案,差不多三年了:

from tkinter import *

class App:
    def __init__(self, root):
        self.root = root
        self.listbox = Listbox(self.root, selectmode=MULTIPLE)
        self.listbox.pack()
        self.listbox.bind("<<ListboxSelect>>", self.callback)
        for i in range(10):
            self.listbox.insert(END, i)
        self.selection = self.listbox.curselection()
    def callback(self, a):
        if len(self.listbox.curselection()) > 3:
            for i in self.listbox.curselection():
                if i not in self.selection:
                    self.listbox.selection_clear(i)
        self.selection = self.listbox.curselection()

root = Tk()
App(root)
root.mainloop()

这会在每次检查后创建一个数据实例,然后检查前一个实例以查看是否存在任何差异,然后删除这些差异。