как вставить живой панду в Dataframe и проиндексировать его, чтобы он поместился в моей таблице Tkinter? - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь отправить свои данные mqtt в свою таблицу tkinter, которую я создал с помощью модуля pandastable .Я получаю данные в виде списка.Поэтому я сначала создал 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()

1 Ответ

0 голосов
/ 16 мая 2018

Преобразуйте это в словарь вместо Dataframe, и я думаю, что это будет работать:

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'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...