Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在TKinter列表框中按住shift键选择多个项目?_Python_Tkinter_Listbox_Selection - Fatal编程技术网

Python 如何在TKinter列表框中按住shift键选择多个项目?

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

我试图从列表框中选择多个项目,在选择时按shift键并选择一个项目块似乎很直观,但Tkinter中似乎没有这方面的内置功能

因此,我试图通过注册shift键并获取最新的选择来实现它。但我一直在努力找出列表框中的最新选择。getACTIVE似乎落后于我的预期

这是我迄今为止一直在尝试做的事情,我知道当我知道最新的选择时,我需要做更多的事情,但这将在以后进行

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你能把它作为一个答案,这样我就可以把它标记为最佳答案吗?