Python 如何在TKinter列表框中按住shift键选择多个项目?
我试图从列表框中选择多个项目,在选择时按shift键并选择一个项目块似乎很直观,但Tkinter中似乎没有这方面的内置功能 因此,我试图通过注册shift键并获取最新的选择来实现它。但我一直在努力找出列表框中的最新选择。getACTIVE似乎落后于我的预期 这是我迄今为止一直在尝试做的事情,我知道当我知道最新的选择时,我需要做更多的事情,但这将在以后进行Python 如何在TKinter列表框中按住shift键选择多个项目?,python,tkinter,listbox,selection,Python,Tkinter,Listbox,Selection,我试图从列表框中选择多个项目,在选择时按shift键并选择一个项目块似乎很直观,但Tkinter中似乎没有这方面的内置功能 因此,我试图通过注册shift键并获取最新的选择来实现它。但我一直在努力找出列表框中的最新选择。getACTIVE似乎落后于我的预期 这是我迄今为止一直在尝试做的事情,我知道当我知道最新的选择时,我需要做更多的事情,但这将在以后进行 from Tkinter import * class GUI(): def __init__(self,frame): # Som
from Tkinter import *
class GUI():
def __init__(self,frame): # Some Init
self.listbox = Listbox(root, height=20, width=51, selectmode=MULTIPLE, exportselection=0, yscrollcommand=yscrollbar.set, xscrollcommand=xscrollbar.set)
# -- Some Grid setup here --
self.listbox.bind("<<ListboxSelect>>", self.selectionCallback)
frame.bind("<Shift_L>", self.shiftCallback)
frame.bind("<KeyRelease-Shift_L>", self.shiftCallback)
def selectionCallback(self,event):
print self.listbox.get(ACTIVE) # This is where im stuck
def shiftCallback(self,event):
if event.type is 2: #KeyPress
self.shift = True
elif event.type is 3: #KeyRelease
self.shift = False
if __name__ == "__main__":
root = Tk()
GUI(root)
默认情况下,您似乎想要的行为实际上是可用的,请使用
Listbox(..., selectmode=EXTENDED, ...)
发件人:
列表框通过selectmode选项提供四种不同的选择模式。这些都是单个选项,浏览方式相同,但可以使用鼠标移动选择,可以通过每次单击一个来选择多个项目,或者使用Shift和Control键盘修改器选择扩展的多个项目范围。默认设置为浏览。使用MULTIPLE获得“checklist”行为,并在用户通常只选择一个项目,但有时希望选择一个或多个项目范围时进行扩展
对于listbox.getACTIVE,处于活动状态的项是带下划线的项。您可以看到,这仅在释放鼠标按钮时更新。由于该事件是在按下鼠标时触发的,因此您将获得以前选择的项目,因为活动项目尚未更新。默认情况下,您似乎想要的行为实际上是可用的,请使用
Listbox(..., selectmode=EXTENDED, ...)
发件人:
列表框通过selectmode选项提供四种不同的选择模式。这些都是单个选项,浏览方式相同,但可以使用鼠标移动选择,可以通过每次单击一个来选择多个项目,或者使用Shift和Control键盘修改器选择扩展的多个项目范围。默认设置为浏览。使用MULTIPLE获得“checklist”行为,并在用户通常只选择一个项目,但有时希望选择一个或多个项目范围时进行扩展
对于listbox.getACTIVE,处于活动状态的项是带下划线的项。您可以看到,这仅在释放鼠标按钮时更新。由于该事件是在按下鼠标时触发的,因此您将获得以前选择的项目,因为活动状态尚未更新。我认为selectmode=EXTENDED是你想要的答案谢谢@fhdrsdg你能把它作为一个答案,这样我就可以把它标记为最佳答案吗?我认为selectmode=EXTENDED是你想要的答案谢谢@fhdrsdg你能把它作为一个答案,这样我就可以把它标记为最佳答案吗?