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

How to limit the number of selections in a tkinter listbox?

假设我有一段这样的代码:

from tkinter import *

master=Tk()

ListBox1 = Listbox(master, selectmode=MULTIPLE)

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

ListBox1.pack()

我想知道是否可以将所选对象的数量限制为 3 或 4 个。快速 google 搜索和阅读 listbox 的配置选项没有结果结果,坦率地说,我对如何实现这些结果感到困惑。

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

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

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()

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