青亭浅 2024-05-13 21:57 采纳率: 85.7%
浏览 2
已结题

关于#python#的问题:其中的treeview绑定的双击事件无效

其中的treeview绑定的双击事件无效,不显示任何东西



```python
from tkinter import *
from tkinter import ttk
from tkinter.ttk import Treeview

from test2.db import db


class search(Frame):
    def __init__(self,master):
        super().__init__(master)
        self.table_view=Frame()
        self.table_view.pack()

        self.create_page()

    def create_page(self):
        columns=("name","chinese","math","english")
        columns_values= ("姓名", "语文", "数学", "英语")
        self.tree_view =ttk.Treeview(self,show='headings',columns=columns)
        self.tree_view.column("name",width=80,anchor='center')
        self.tree_view.column("chinese", width=80, anchor='center')
        self.tree_view.column("math", width=80, anchor='center')
        self.tree_view.column("english", width=80, anchor='center')
        self.tree_view.heading('name',text="姓名")
        self.tree_view.heading('chinese',text="语文")
        self.tree_view.heading('math', text="数学")
        self.tree_view.heading('english', text="英语")
        self.tree_view.pack(fill=BOTH,expand=True)
        self.tree_view.bind("Double-Button-1>",self.dssdd)
        self.show_data_frame()

        Button(self,text="刷新数据",command=self.show_data_frame).pack(anchor=E,pady=5)

    def dssdd(self):
        print("dasdsadasd")

    def show_data_frame(self):
        for _ in map(self.tree_view.delete,self.tree_view.get_children('')):
            pass
        students=db.all()
        index=0
        for stu in students:
            print(stu)
            self.tree_view.insert("",index+1,values=(
                stu['name'],stu['math'],stu['chinese'],stu['english']
            ))




  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2024-05-13 21:57
    关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    问题分析:

    代码中绑定双击事件的代码是:self.tree_view.bind("Double-Button-1>",self.dssdd),应该是绑定错误,正确的应该是self.tree_view.bind("<Double-Button-1>",self.dssdd)

    解决方案:

    1. 更改treeview绑定双击事件的代码:self.tree_view.bind("<Double-Button-1>",self.dssdd)

    2. 确认双击事件绑定成功后,修改展示方法show_data_frame获取到的数据进行展示。

    修改后的代码如下:

    from tkinter import *
    from tkinter import ttk
    from tkinter.ttk import Treeview
    
    from test2.db import db
    
    
    class search(Frame):
        def __init__(self,master):
            super().__init__(master)
            self.table_view=Frame()
            self.table_view.pack()
    
            self.create_page()
    
        def create_page(self):
            columns=("name","chinese","math","english")
            columns_values= ("姓名", "语文", "数学", "英语")
            self.tree_view =ttk.Treeview(self,show='headings',columns=columns)
            self.tree_view.column("name",width=80,anchor='center')
            self.tree_view.column("chinese", width=80, anchor='center')
            self.tree_view.column("math", width=80, anchor='center')
            self.tree_view.column("english", width=80, anchor='center')
            self.tree_view.heading('name',text="姓名")
            self.tree_view.heading('chinese',text="语文")
            self.tree_view.heading('math', text="数学")
            self.tree_view.heading('english', text="英语")
            self.tree_view.pack(fill=BOTH,expand=True)
            self.tree_view.bind("<Double-Button-1>",self.dssdd)
            self.show_data_frame()
    
            Button(self,text="刷新数据",command=self.show_data_frame).pack(anchor=E,pady=5)
    
        def dssdd(self, event):
            item = self.tree_view.selection()[0]
            print(self.tree_view.item(item, "values"))
    
        def show_data_frame(self):
            self.tree_view.delete(*self.tree_view.get_children())
            students=db.all()
            index=0
            for stu in students:
                print(stu)
                self.tree_view.insert("",index+1,values=(
                    stu['name'],stu['math'],stu['chinese'],stu['english']
                ))
    

    修改后,treeview双击事件生效,且能正确展示数据。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月21日
  • 已采纳回答 5月13日
  • 创建了问题 5月13日