【问题标题】:Selecting data from a treeview从树视图中选择数据
【发布时间】:2023-04-06 14:49:02
【问题描述】:

我使用 ttk.TreeView 作为多列 ListBox,它有效地将我发送给它的 sql 数据显示为表格。当我进行 sql 查询并且树视图显示查询的数据时,可以选择选择数据,因为单击时会突出显示该行。我是否可以单击一行以突出显示数据,然后单击另一个按钮创建一个弹出窗口,其中包含要编辑的数据?

因为我正在使用 SQL,我只需要选择数据,然后我可以使用它从 SQL 表中删除它,而不是从树视图表中删除。这是下面的树,其中包含一些被选中的数据的示例。我可以只传递要编辑或删除的选定数据或类似的东西吗?

编辑:

        def OnDoubleClick(self,event):
            top1=Toplevel(height=600,width=500)
            #frame is just for managing objects not absolutely needed but i think it is good
            #to use frame when using object so i have kept it in
            curItem = self.tree.focus()
            contents =(self.tree.item(curItem))
            selectedetails = contents['values'] 
            #this is what you would use to when presenting the selectedd information


            self.example_var = StringVar()
            self.example_var.set(selectedetails[1])
            self.example_txt = Entry(top1,textvariable=self.example_var)
            self.example.grid(row=1,column=1)

我将用于管理对象的框架更改为 Toplevel,并更改了入口小部件的位置,使其位于同一位置(top1)。当我双击树中的一个项目时产生的错误消息是:

Exception in Tkinter callback
Traceback (most recent call last):
    File "C:\Python33\lib\tkinter\__init__.py", line 1489, in __call__
        return self.func(*args)
    File "C:\Users\lukeh\Documents\a\test for double click.py", line 278, in OnDoubleClick
        self.example.grid(row=1,column=1)
AttributeError: 'MultiColumnListbox' object has no attribute 'example'

当我删除 self.example 开始的代码的后半部分时,代码实际上似乎除了创建 Toplevel 之外没有做任何事情。

编辑:

当我删除 self.example 代码行并仅使用 print (selectedetails) 时,输出正确的数据行。

【问题讨论】:

    标签: python sql select tkinter treeview


    【解决方案1】:

    首先您需要将事件绑定到您的树 iv 使用双击

    self.tree.bind("<Double-1>",lambda event :self.OnDoubleClick(event))
    #note the OnDoubleClick is the name of the sub that python will look for when tree 
    #double clicked
    

    接下来,您需要创建在树双击时将调用的子例程(例如,它是 OnDoubleClick)

    def OnDoubleClick(self, event):
            frame3 = tk.LabelFrame(self, text="frame1", width=300, height=130, bd=5)
            frame3.grid(row=2, column=0, columnspan=3, padx=8)
            #frame is just for managing objects not absolutely needed but i think it is good
            #to use frame when using object so i have kept it in
            curItem = self.tree.focus()
            contents =(self.tree.item(curItem))
            selectedetails = contents['values'] 
            #this is what you would use to when presenting the selectedd information
    

    然后要访问这些选定的数据,只需使用带有所需缩进的数组名称(在本例中为 selectedetails)。然后我使用字符串变量来填充所选数据的条目。

    self.example_var = StringVar()
    self.example_var.set(selectedetails[1])
    self.example_txt = Entry(frame3,textvariable=self.example_var)
    self.example_txt.grid(row=1,column=1)
    

    【讨论】:

    • 第一部分肯定有用,双击部分。但是,当我单击它时,您的代码的后半部分对我来说有很多错误。它似乎没有绑定选定的数据。是因为我想选择整行吗?
    • 产生的错误是什么,您可以复制并过去错误的名称,这可能是我没有粘贴所有代码,因为当我在课程作业中运行它时很好 -请注意,如果您认为通过 Skype 通话解决问题需要的不仅仅是评论,我还可以
    • 我将通过添加您的代码来编辑我的主要问题(我更改了其中的一些,也许这就是问题所在)并显示产生的错误消息。
    • 我查看了代码,这是我的错,我忘记在最后一行添加 _text 这导致错误,因为试图放置不存在的对象 iv 修改了我的代码(查看最后几行)跨度>
    • 是的,这似乎解决了我收到的错误消息,令人惊讶的是一小段代码可以做什么。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 2014-08-12
    相关资源
    最近更新 更多