【问题标题】:why can't i populate my tksheet table row?为什么我不能填充我的 tksheet 表格行?
【发布时间】:2020-12-16 23:55:24
【问题描述】:
  1. 我正在尝试在 python 中设置学生出勤记录。我已经弄清楚了大部分。我被困在一个部分,它是陪护部分。我正在尝试使用表格格式(tksheets)来记录学生的姓名和出勤率。我遇到的问题是使用 tksheets。我似乎无法从我的数据库(SQLite3)中获取信息来填充列。我也尝试过 tktables 和 pandastables。但我又遇到了同样的问题。

我考虑过使用 Treeview 小部件来填充学生姓名的列,然后使用输入框添加出勤率。问题是我必须创建每个输入框并单独放置。我不喜欢这个计划。以下是我正在使用的当前代码。

如果有人能告诉我如何从数据库中获取数据并填充我正在使用的电子表格,那就太好了。谢谢。

    def rows(self):
        self.grid_columnconfigure(1, weight=1)
        self.grid_rowconfigure(1,weight=1)
        self.sheet = Sheet(self.aug_tab,
                       data=[[f'Row{r} Column{c}' for c in range(36)]for r in range(24)],
                           height=300,
                           width=900)
        self.sheet.enable_bindings(("single",
                                         "drag_select",
                                         "column_drag_and_drop",
                                         "row_drag_and_drop",
                                         "column_select",
                                         "row_select",
                                         "column_width_resize",
                                         "double_click_column_resize",
                                         "row_width_resize",
                                         "column_height_resize",
                                         "arrowkeys",
                                         "row_height_resize",
                                         "double_click_row_resize",
                                         "right_click_popup_menu",
                                         "rc_insert_column",
                                         "rc_delete_column",
                                         "rc_insert_row",
                                         "rc_delete_row",
                                         "copy",
                                         "cut",
                                         "paste",
                                         "delete",
                                         "undo",
                                         "edit_cell"))
           

        self.headers_list = ("Student ID","Ch. First Name","Ch. Last Name","Eng. Name")
        self.headers = [f'{c}'for c in self.headers_list]
        self.sheet.headers(self.headers)

        self.sheet.pack()
        print(self.sheet.get_column_data(0,0))

    #############DEFINE FUNCTIONS###############################

    rows(self)

enter image description here

【问题讨论】:

    标签: python tkinter pycharm


    【解决方案1】:

    """如果您想从数据库中获取数据,那么您必须制作一个主框架并添加按钮,然后将您的演示 tksheet 功能作为顶级框架,我自己制作了一个来打开我的数据库, 你只需要用你的数据库更改我的代码中的数据库。这是我的代码"""

    import tkinter as tk
    import datetime as dt
    from tkinter import ttk
    
    
    def open_window1():
        from tksheet import Sheet
        import tkinter as tk
        import sqlite3
    
       conn= sqlite3.connect('toko.db')
       c= conn.cursor()
    
       class demo(tk.Tk):
           def __init__(self):
              tk.Tk.__init__(self)
              self.grid_columnconfigure(0, weight = 1)
              self.grid_rowconfigure(0, weight = 1)
              self.sheet_demo = Sheet(self,
                                      height = 500,
                                      width = 700)
              self.sheet_demo.enable_bindings(("single",
                                       "drag_select",
                                       "column_drag_and_drop",
                                       "column_select",
                                       "row_select",
                                       "arrowkeys",
                                       "column_width_resize",
                                       "row_width_resize",
                                       "copy",
                                       "rc_insert_column",
                                       "rc_insert_row"))
    
                self.sheet_demo.grid(row = 0, column= 0, sticky= "nswe")
        
                self.headers= ("id","Produk","Stok","Harga Grosir","Harga Eceran")
                self.sheet_demo.headers(self.headers)
    
                c.execute("SELECT * FROM StokDanHarga")
                h=len(c.fetchall())
                print(h)
                self.data =[[f"Row {r} Column {c}" for c in range(3)] for r in   range(h)]
                self.sheet_demo.data_reference(self.data)
                a=c.execute("SELECT * FROM StokDanHarga")
                j=0
                for row in a:
                    # i= len(a)
                    r=j   
                    print(r,j) 
                    self.sheet_demo.set_row_data(r, values = row)   
                    j += 1
            
    
    
        app= demo()
        app.mainloop()  
    
    root= tk.Tk()
    root.title("combobox")
    root.geometry("400x400")
    
    buttn = ttk.Button(root, text='STOK DAN HARGA', command=open_window1)
    buttn.grid(row=0, column=0)
    
    
    
    root.mainloop()
    

    【讨论】:

    • 嘿,这很好,谢谢。现在我可以用数据库数据填充工作表。下一步是反向并从我的 tksheet 中获取数据并填充数据库。再次感谢
    【解决方案2】:

    """那么你应该在你的代码和一个按钮中添加一个函数,而你可以一个一个地插入你的学生姓名或将你的学生姓名批量复制到工作表中,这是我的代码"""

    from tksheet import Sheet
    import tkinter as tk
    
    
    class demo(tk.Tk):
        def __init__(self):
            tk.Tk.__init__(self)
            self.grid_columnconfigure(0, weight = 1)
            self.grid_rowconfigure(0, weight = 1)
            self.sheet_demo = Sheet(self,
                                    height = 500,
                                    width = 700) 
            self.sheet_demo.enable_bindings(("single",
                                             "drag_select",
                                             "column_drag_and_drop",
                                             "row_drag_and_drop",
                                             "column_select",
                                             "row_select",
                                             "column_width_resize",
                                             "double_click_column_resize",
                                             "row_width_resize",
                                             "column_height_resize",
                                             "arrowkeys",
                                             "row_height_resize",
                                             "double_click_row_resize",
                                             "right_click_popup_menu",
                                             "rc_insert_column",
                                             "rc_delete_column",
                                             "rc_insert_row",
                                             "rc_delete_row",
                                             "copy",
                                             "cut",
                                             "paste",
                                             "delete",
                                             "undo",
                                             "edit_cell"))
        
            self.sheet_demo.grid(row = 0, column = 0, sticky = "nswe")
        
     
            self.data = [[f"" for c in range(1)] for r in range(100)]
            self.sheet_demo.data_reference(self.data)
        
    
            def click_this():
                for i in (self.sheet_demo.get_column_data(0)): 
                    if i == '':
                    break
                    else:
                        print(i.strip())
                        self.data = [[f"" for c in range(1)]for r in range(100)]
                        self.sheet_demo.data_reference(self.data)
                    
            button=tk.Button(text=" click this",command= click_this)
            button.grid(row= 1, column=0, sticky= "n")
    
    
        
    app = demo()
    app.mainloop()
    

    【讨论】:

      猜你喜欢
      • 2014-08-01
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      相关资源
      最近更新 更多