Python 3.x 如何推送LivePanda数据帧并对其进行索引以使其适合我的Tkinter表?
我试图将mqtt数据推送到tkinter表中,该表是我使用模块创建的。我正在以列表的形式获取数据。因此,我首先创建了一个csv文件,并手动标记它。然后我把我的列表推到了csv文件中。因此,我的表中有两个部分,首先它将从我的csv文件中获取转换后的数据帧,类似于表的历史部分,然后我需要在其打开时将我最近的数据帧(与我以前的数据帧格式相同,csv文件的列索引作为我的数据帧列索引)推送到该表中。我还将最近的数据帧保存在csv文件中,这样每次我打开表格时,这个过程都可以循环。问题是我不知道哪里出了问题。 这是我的表格脚本:Python 3.x 如何推送LivePanda数据帧并对其进行索引以使其适合我的Tkinter表?,python-3.x,pandas,tkinter,Python 3.x,Pandas,Tkinter,我试图将mqtt数据推送到tkinter表中,该表是我使用模块创建的。我正在以列表的形式获取数据。因此,我首先创建了一个csv文件,并手动标记它。然后我把我的列表推到了csv文件中。因此,我的表中有两个部分,首先它将从我的csv文件中获取转换后的数据帧,类似于表的历史部分,然后我需要在其打开时将我最近的数据帧(与我以前的数据帧格式相同,csv文件的列索引作为我的数据帧列索引)推送到该表中。我还将最近的数据帧保存在csv文件中,这样每次我打开表格时,这个过程都可以循环。问题是我不知道哪里出了问题。
import tkinter as tk
import pandas as pd
from pandastable import Table, TableModel
from threading import Thread
import time
import datetime
import numpy as np
#import mqtt_cloud_rec
#import tkintermqtt
prevframe = pd.read_csv('mqttresult.csv')
class TestApp(tk.Frame):
"""Basic test frame for the table"""
def __init__(self, parent=None):
self.parent = parent
tk.Frame.__init__(self)
self.main = self.master
self.main.geometry('800x600+200+100')
self.main.title('Mqtt Result Table')
f = tk.Frame(self.main)
f.pack(fill=tk.BOTH,expand=1)
#df = TableModel.getSampleData(rows=5)
self.table = pt = Table(f, dataframe=prevframe, showtoolbar=True )
pt.show()
self.startbutton = tk.Button(self.main,text='START',command=self.start)
self.startbutton.pack(side=tk.TOP,fill=tk.X)
self.stopbutton = tk.Button(self.main,text='STOP',command=self.stop)
self.stopbutton.pack(side=tk.TOP,fill=tk.X)
# self.table.showPlotViewer()
return
def update(self,data):
table=self.table
#plotter = table.pf
#opts = plotter.mplopts
#plotter.setOption('linewidth',3)
#plotter.setOption('kind','line')
#opts.widgets['linewidth'].set(3)
#opts.widgets['kind'].set('line')
date_today=str(datetime.date.today())
time_today=time.strftime("%H:%M:%S")
datalist=[date_today,time_today]+self.data
datalist1=np.array(datalist)
datalist2=pd.DataFrame(data=datalist1 ,columns=['Date','Time','power state','Motor state','Mode','Voltage','Current','Power Factor','KW','KWH','total Runtime'])
#self.table = Table(dataframe=datalist2, showtoolbar=True )
self.dataframe.loc[len(self.dataframe)]=datalist2
table.model.df=self.dataframe
table.redraw()
#table.multiplecollist=range(0,10)
#table.plotSelected()
time.sleep(.1)
if self.stop == True:
return
return
def start(self):
self.stop=False
t = Thread(target=self.update)
t.start()
def stop(self):
self.stop = True
return
app = TestApp()
#launch the app
app.mainloop()
将其转换为字典而不是数据帧,我认为它会起作用:
datalist=[date_today,time_today]+self.data
datalist1=np.array(datalist)
datalist2=pd.DataFrame(data=datalist1 ,columns=['Date','Time','power state','Motor state','Mode','Voltage','Current','Power Factor','KW','KWH','total Runtime'])
我试过这样的东西,但没用。我说的是个错误。ValueError:如果使用所有标量值,则必须传递索引