display a log file in real time with tkinter text field (python2.7)

时间:2016-02-03 03:55:30

标签: python tkinter tail

I am trying to write a GUI that can display the log file in real time (tail -f log). The new line from the log file can be printed out into the terminal, but it cannot be loaded into the text field (line #). Can any one tell me why it won't put back to the text field?

from Tkinter import *
import os, time
import tkFileDialog

class Controller(object):
    def __init__(self, master):
        """ Main interface:
        master - the top level window
        """
        self._master = master

        frame1 = Frame(self._master)
        label = Label(self._master, text="Select a Log File")
        label.pack(side=TOP)
        currentLogfile = StringVar(self._master)
        LogfileList = [f for f in os.listdir('.') if os.path.isfile(f)]
        currentLogfile.set(LogfileList[0])
        chooseLog = OptionMenu(self._master, currentLogfile, *LogfileList, command = self.file_open)
        chooseLog.config(width = "300")
        chooseLog.pack(side=TOP)
        self._master.config(menu=chooseLog)
        self._Text=Text(frame1, bg = 'black', fg = 'white')
        self._Text.pack(side = TOP,fill=BOTH, expand = True,pady=20)
        w = Scrollbar(self._Text)
        w.pack(side=RIGHT, fill=Y)
        frame1.pack(side=TOP, fill=BOTH, padx=5,expand=True)

    def file_open(self,filename):        
        #clear text field
        self._Text.delete('1.0', END)
        with open(filename,'r') as f:
            loglines = follow(f)
            for line in loglines:
                #print line
                self._Text.insert(END,line)

def follow(thefile):
    thefile.seek(0,2)
    while True:
        line = thefile.readline()
        if not line:
            time.sleep(5)
            continue
        yield line                


if __name__ == "__main__":
    root=Tk()
    c=Controller(root)
    root.title("log")
    root.geometry("750x500")
    root.mainloop()

0 个答案:

没有答案