如何在python tkinter GUI中动态更改树视图上的mysql数据
我是python新手,不知道如何在python GUI中动态更改treeview上的MySQL数据?在我的代码中,一些“虚拟”数据被导入并保存到MySQL服务器/数据库中,然后python GUI在树视图中显示数据。如果我需要更新树视图中的数据,我必须停止代码并再次运行它。完成此操作后,最新收集的数据将显示在树视图中,但它仍然不会实时更改。这是我的密码:如何在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
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服务器在表名上区分大小写,那么这可能是一个问题。谢谢您的帮助。我会试试的