Tkinter, обновить графический интерфейс (mainloop (), after () update ()) - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть потребитель rabbitmq, который получает некоторые данные, в этом же скрипте я делаю импорт класса в другом файле tkinter.

Следующий код - это метод, который получает данные RabbitMQ и создает tkinterinstance.

from viewver import EntryGrid
    def consume_message(body):
        body = body.decode('ascii')
        body = body.replace("\'", "")
        data = json.loads(body)
        mGui = EntryGrid(colList=['Bids', 'Asks'], rowList=10)
        mGui.viewver(data)

следующий код блока - это метод, который получает данные Rabbit в классе tkinter.

def viewver(self, data = None):
        q = queue.Queue()
        if data != None:    
            q.put(data)
        while not q.empty():
            self.buildGrid(data = q.get()

Здесь, Как я могу обновить GUI.

def buildGrid(self, data, state = None):

        #if state != None:
            #self.__init__(colList = ['Bids', 'Asks'], rowList = 10)
            #self = state

        self.make_header()

        canvas = tkinter.Canvas(self.canvasFrame, width=818)
        canvas.grid(row=0, column=0, sticky="news")
        canvas.delete("all")

        vsb = tkinter.Scrollbar(self.canvasFrame, orient="vertical", command=canvas.yview)
        vsb.grid(row=0, column=1, sticky='ns')
        hsb = tkinter.Scrollbar(self.canvasFrame, orient="horizontal", command=canvas.xview)
        hsb.grid(row=1, column=0, sticky=tkinter.EW)

        canvas.configure(yscrollcommand=vsb.set, xscrollcommand=hsb.set)

        self.entriesFrame = tkinter.Frame(canvas)
        self.entriesFrame.config(width=1000)
        canvas.create_window((0, 0), window = self.entriesFrame, anchor='nw')
        sizeLen = self.maxLen(data)
        bid = data['bid']
        ask = data['ask']

        for i in range(2):
            for j in range(len(sizeLen)):
                if i == 0:
                    try:
                        EntryWidget(self.entriesFrame, 0, j, str(bid[j]['price']) + "               " + str(bid[j]['amount1']/1000))
                    except:
                        EntryWidget(self.entriesFrame, i, j, "")
                elif i == 1:
                    try:
                        EntryWidget(self.entriesFrame, i, j, str(ask[j]['amount1']/1000) + "               " + str(ask[j]['price']))
                    except:
                        EntryWidget(self.entriesFrame, i, j, "")    

        #self.update()
        self.entriesFrame.update_idletasks()

        first5columns_width = 250
        first5rows_height = 500
        self.canvasFrame.config(width=first5columns_width + vsb.winfo_width(),
                    height=first5rows_height)

        canvas.config(scrollregion=canvas.bbox("all"))
        #time.sleep(4)        
        #self.destroy()
        self.after(1000, self.viewver)
        self.mainloop()
        #return self, True

Спасибо.

...