如何在python tkinter GUI中动态更改树视图上的mysql数据

如何在python tkinter GUI中动态更改树视图上的mysql数据,python,mysql,tkinter,treeview,Python,Mysql,Tkinter,Treeview,我是python新手,不知道如何在python GUI中动态更改treeview上的MySQL数据?在我的代码中,一些“虚拟”数据被导入并保存到MySQL服务器/数据库中,然后python GUI在树视图中显示数据。如果我需要更新树视图中的数据,我必须停止代码并再次运行它。完成此操作后,最新收集的数据将显示在树视图中,但它仍然不会实时更改。这是我的密码: from tkinter import * from tkinter import filedialog, t

我是python新手,不知道如何在python GUI中动态更改treeview上的MySQL数据?在我的代码中,一些“虚拟”数据被导入并保存到MySQL服务器/数据库中,然后python GUI在树视图中显示数据。如果我需要更新树视图中的数据,我必须停止代码并再次运行它。完成此操作后,最新收集的数据将显示在树视图中,但它仍然不会实时更改。这是我的密码:

        from tkinter import *
        from tkinter import filedialog, ttk
        from tkinter import messagebox
        import mysql.connector
        import serial
        import time
        from datetime import datetime
        from threading import Thread
        from numba.core.tracing import event
        
        mydb = mysql.connector.connect(host="localhost",user="root",passwd="engineer",database="demo")
        mycursor = mydb.cursor()
        
        
        def send_info(idNumber, timestampStr):
            import mysql.connector
            mydb = mysql.connector.connect(host="localhost", user="root", passwd="engineer", database="demo")
            mycursor = mydb.cursor()
            sqlFormula = "INSERT INTO dailyAttendance (idnumber,time) VALUES (%s,%s)"
            idnumber = [(idNumber, timestampStr)]
            mycursor.executemany(sqlFormula, idnumber)
            mydb.commit()
            return 0
        
        def getSerial():
            ser = serial.Serial('com5', baudrate=9600, timeout=1)
            while(True):
                try:
                    if (ser.in_waiting):
                        data = str(ser.read_until(b'\r').decode('ascii'))
                        ser.flushInput()
                        datalist = data.split(';')
                        col2 = datalist[1]
                        rssivalue = int(col2[5:8])
                        if rssivalue >= -26:
                            col3 = datalist[2]
                            idNumber = col3[5:20]
                            print(idNumber)
                            dateTimeObj = datetime.now()
                            timestampStr = dateTimeObj.strftime("%d-%b-%Y (%H:%M:%S)")
                            send_info(idNumber, timestampStr)
                except Exception as ex:
                    print(ex)
                time.sleep(1)
        
        def mainGUI():
            master = Tk()
            master.geometry("800x700")  # (widthxheight)
            master.title("Graphical User Interface")
            topFrame = ttk.LabelFrame(master, text="Student Attendance")
            topFrame.pack(fill="both", expand="yes", padx=20, pady=10)
            table = ttk.Treeview(topFrame, columns=(1, 2), show="headings", height="2")
            table.place(relheight=1, relwidth=1)
            table.heading(1, text="Tag ID")
            table.heading(2, text="Timestamp")
            treescrolly = ttk.Scrollbar(topFrame, orient="vertical", command=table.yview)
            treescrolly.pack(side="right", fill="y")
            table.configure(yscrollcommand=treescrolly.set)
        
            def update():
                mycursor.execute("SELECT idnumber, time from dailyattendance")
                mysqldata = mycursor.fetchall()
                table.delete(*table.get_children())
                for row in mysqldata:
                    table.insert('', 'end', values= (row[0], row[1]))
                master.after(500, update)
        
            update()
            master.mainloop()
        
        Thread(target= getSerial).start()
        Thread(target= mainGUI).start()
        

我已经尝试在我的
update()
函数中使用
.after()
,如代码中所示,但treeview没有实时更新。我不知道我做错了什么。任何帮助都将不胜感激

您最好检查向表中插入数据是否成功。或者检查您是否实际从表中检索了数据。请注意,您在
INSERT
语句中使用了
dailAttendence
,但在
SELECT
语句中使用了
dailAttendence
。如果您的MySQL服务器在表名上区分大小写,那么这可能是一个问题。谢谢您的帮助。我会试试的