在没有冷冻gui的情况下模拟tkinter中的尾部功能

时间:2014-01-07 14:58:02

标签: python multithreading tkinter tail

基本上我试图将ubuntu的tail函数实现为python tkinter按钮。尾部代码工作正常,但只有当我尝试将其实现到tkinter时,我遇到了整个gui冻结的问题。我可以采取几种方法来解决这个问题,但我想知道什么是最简单,最快捷的方法。到目前为止,这是我的代码:

#gui code

from tkinter import *
from tkinter import filedialog
from tkinter import Tk, Button
from subprocess import Popen 
import tkinter
import os
import time

master = Tk()
root = tkinter.Tk()

root.attributes("-topmost",True)
master.withdraw()
root.lift()

def userpass():
    os.startfile('config.ini')


def follow(thefile):
    thefile.seek(0,2)      # Go to the end of the file
    while True:
         line = thefile.readline()
         if not line:
             time.sleep(1)    # Sleep briefly
             continue
         yield line

def crap(tex):
    loglines = follow(open("jessica.gw2.log"))
    for line in loglines:
        #print(line)
        tex.insert(tkinter.END, line)
        tex.see(tkinter.END)


def cbc(tex):
    return lambda : crap(tex)

x = (root.winfo_screenwidth() - root.winfo_reqwidth()) / 1.1    
y = (root.winfo_screenheight() - root.winfo_reqheight()) / 20
root.geometry("+%d+%d" % (x, y))
tex = tkinter.Text(root)
tex.pack(side=tkinter.BOTTOM)

b = Button(root, text="Set your Options ", command=userpass)
o = Button(root, text="Press to view logs", command = cbc(tex))
b.pack()
o.pack()


mainloop()

1 个答案:

答案 0 :(得分:1)

改变了我的功能。只需稍作修改即可。我摆脱了垃圾,cbc和跟随功能,然后我改变了这个按钮

o = Button(root, text="Start monitoring Log file", command = viewlogfile)

以便它调用我添加的这个函数

def viewlogfile():
    f = open('insertfilenamehere', "r")
    text = f.read()
    tex.insert(tkinter.END, text)
    tex.see(tkinter.END)
    root.after(3000,viewlogfile)

然后将其他所有内容保持不变