首页 > 解决方案 > 如何更新 tksheet 中的窗口(表)表?

问题描述

您好朋友,我如何更新 tksheet 中的窗口。我有一个数据库。它连接到 Postgresql 并提取数据。此外,我可以选择数据的日期,从哪个日期开始。开始后,我选择日期并单击“获取数据”按钮。显示第一次。第一次之后,数据并没有输出到界面,而是显示在控制台中。您无法再次选择日期并将其显示在界面上。我认为您需要尽快更新窗口。

       def sec_frame(self):
           global date_from1, date_from2
           sec_frame1 = Frame(self.master, background='#21acfc', )
           sec_frame1.pack()

           query_button = tk.Button(sec_frame1, text='Get data', width=200, command=self.get_datas)
           query_button.pack(side=LEFT, padx=50, pady=40)

           date_from1 = DateEntry(sec_frame1, background='#e03aca', font="Helvetica 14", locale='KY')
           date_from1.pack(side=LEFT, padx=50)

           date_from2 = DateEntry(sec_frame1, background='#e03aca', font="Helvetica 14",locale='KY')
           date_from2.pack(side=LEFT)
     
    
        def get_datas(self):
            date1 = date_from.get_date()
            date2 = date_to.get_date()
            query_datas= f"select *from client_info where date_to='{date1}'::date and date_from='{date2}'::date"
            self.cursor.execute(query_datas)
            get_datas = self.cursor.fetchall()
            print(get_datas) #I actually get the data in the console
            try:
                get_datas[0]
            except IndexError:
                messagebox.showerror('some text', 'some text')
    
            lenn = len(get_datas)
            len1 = len(get_datas[0])
            bottom_frame = Frame(self.master, )
            table = Sheet(bottom_frame, page_up_down_select_row=True, column_width=120, startup_select=(0, 1, "rows"),
                          data=[[get_datas[r][c] for c in range(len1)] for r in range(lenn)],
                          height=1000,
                          width=1920
                          )
            table.enable_bindings(("single_select",
                                   "drag_select",
                                   "column_drag_and_drop",
                                   "row_drag_and_drop",
                                   "column_select",
                                   "row_select",
                                   "column_width_resize",
                                   "double_click_column_resize",
                                   "arrowkeys",
                                   "row_height_resize",
                                   "double_click_row_resize",
                                   "right_click_popup_menu",
                                   "rc_select",
                                   "rc_insert_column",
                                   "rc_delete_column",
                                   "rc_insert_row",
                                   "rc_delete_row",
                                   "hide_columns",
                                   "copy",
                                   ))
            bottom_frame.pack()
            table.pack(side=TOP)

标签: python-3.xtkintertkintertable

解决方案


** 非常感谢您。你是对的。我这样做了。在 sec_frame 函数中,我创建了全局变量表 bottom_frame。我在 get_datas 函数中调用了这些全局变量,并将一个空值传递给表 table.set_sheet_data(data=[])。每次我先单击按钮时,我都会将空数据传递给表。然后接收到的请求再次通过表。set_sheet_data(data=[......])。在bottom_frame的最后,table做了一个pack() **


推荐阅读