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

Python 如何限制tkinter列表框中的选择数?,python,tkinter,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个左右。快速的谷歌搜索和对列表框配置选项的阅读没有产生任何结果,坦率地说,我很困惑如何才能获得这些结果。是的

假设我有这样一段代码:

from tkinter import *

master=Tk()

ListBox1 = Listbox(master, selectmode=MULTIPLE)

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

ListBox1.pack()

我想知道是否有可能将所选对象的数量限制在3或4个左右。快速的谷歌搜索和对列表框配置选项的阅读没有产生任何结果,坦率地说,我很困惑如何才能获得这些结果。

是的,这是可能的。您可以完全控制在列表框中选择的内容。但是,没有内置的支持,因此您必须编写所有跟踪选择的代码,并且不允许基于某些条件更改选择。这可能会创建一个非常混乱的用户体验,因为用户无法知道这个标准外观的列表框具有非标准行为。

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

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()
从tkinter导入*
类应用程序:
定义初始化(自,根):
self.root=根
self.listbox=listbox(self.root,selectmode=MULTIPLE)
self.listbox.pack()
self.listbox.bind(“,self.callback)
对于范围(10)内的i:
self.listbox.insert(结束,i)
self.selection=self.listbox.curselection()
def回调(自我,a):
如果len(self.listbox.curselection())>3:
对于self.listbox.curselection()中的i:
如果我不在self.selection中:
self.listbox.selection\u clear(i)
self.selection=self.listbox.curselection()
root=Tk()
应用程序(根)
root.mainloop()

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

感谢您的解释,整个下午我都在为它集思广益,当我尝试继续前进并给用户一个错误对话框时,我会再次检查选择了多少。这可能就是问题的症结所在,但如果我能找到一种方法来轻松限制选择的数量,我会把它发布在这里,供未来的用户使用。