2017-04-12 13 views
1

私のテキストウィジェットがこのコードで正しくパックされないのはなぜですか?レコードについては、ユーザーのDocumentsフォルダ内のログファイルを読み込んで、Textウィジェットに内容を表示して、赤い警告とエラーと青色の情報を表示することになっています。どんな助けでも大歓迎です!ここでpythonとtkinter:私が使用しているテキストウィジェットはパックしていません

は私が思いついた新しいコードはだが、テキストウィジェットは、メインフレームの内側にパックしていません...

#!/usr/bin/python3 
import tkinter as tk 
import sys 
import time 
from os.path import expanduser 

def get_log_path(): 
    p = "" 
    if sys.platform == "linux" or sys.platform == "linux2": 
     p = expanduser("~/.local/share/binding of isaac afterbirth+/log.txt") 
    elif sys.platform == "darwin": 
     p = expanduser("~/Library/Application Support/Binding of Isaac Afterbirth+/log.txt") 
    elif sys.platform == "win32": 
     p = expanduser("~/Documents/My Games/binding of isaac afterbirth+/log.txt") 
    return p 
    pass 

class GUI(tk.Frame): 
    def __init__(self, master=None): 
     super(GUI, self).__init__() 
     self.master = master 
     self.start_stop = False 
     self.log_path = get_log_path() 
     self.output = tk.Text(self) 
     self.menubar = tk.Menu(master) 
     self.menubar.add_command(label="Start", command=self.start) 
     self.menubar.add_command(label="Stop", command=self.stop) 
     master.config(menu=self.menubar) 
     self.oldline = " " 
     self.init_layout() 
     pass 

    def init_layout(self): 
     self.output.config(font="sans 12", width=200, height=60, state = tk.DISABLED) 
     self.output.tag_config("error", foreground="#FF0000") 
     self.output.tag_config("info", foreground="#0000FF") 
     self.output.pack() 
     self.readfile() 
     pass 

    def readfile(self): 
     if self.start_stop: 
      tmp = self.log_f.readline().lower() 
      if self.oldline != tmp: #display spam only [email protected] 
       if "err" in tmp or "error" in tmp or "warn" in tmp and not "overlayeffect" in tmp and not "animation" in tmp: #Error filter to display 
        #print(tmp, end='', file=sys.stderr) 
        self.output.insert(tk.END, tmp) 
        index = "end - 1 lines" 
        self.output.tag_add("error", index) 
       elif "lua" in tmp: 
        self.output.insert(tk.END, tmp) 
        index = "end - 1 lines" 
        self.output.tag_add("info", index) 
       self.oldline = tmp 
      self.after(5, self.readfile) 
      pass 
     pass 
    def start(self): 
     self.log_f = open(self.log_path, "r") 
     self.start_stop = True 
     self.readfile() 
     pass 
    def stop(self): 
     self.log_f.close() 
     self.start_stop = False 
     pass 
    pass 

if __name__ == "__main__": 
    root = tk.Tk() 
    root.title("Isaac Debug Helper") 
    root.geometry("650x500") 
    gui = GUI(root) 
    gui.mainloop() 

と参照用の古いコードがあります:

#!/usr/bin/python3 
import tkinter as tk 
import sys 
import time 
from os.path import expanduser 

def get_log_path(): 
    p = "" 
    if sys.platform == "linux" or sys.platform == "linux2": 
     p = expanduser("~/.local/share/binding of isaac afterbirth+/log.txt") 
    elif sys.platform == "darwin": 
     p = expanduser("~/Library/Application Support/Binding of Isaac Afterbirth+/log.txt") 
    elif sys.platform == "win32": 
     p = expanduser("~/Documents/My Games/binding of isaac afterbirth+/log.txt") 
    return p 
    pass 

class GUI(tk.Frame): 
    def __init__(self, master=None): 
     super(GUI, self).__init__() 
     self.master = master 
     self.start_stop = True 
     self.log_path = get_log_path() 
     self.output = tk.Text(self) 
     self.frame=tk.Frame() 
#  self.reloadButton = tk.Button(self.frame, text="Reload", command=self.reload) 
     self.startButton = tk.Button(self.frame, text="Start", command=self.start) 
     self.stopButton = tk.Button(self.frame, text="Stop", command=self.stop) 
     self.oldline = " " 
     self.init_layout() 
     pass 

    def init_layout(self): 
     self.output.pack(side=tk.LEFT)#, fill=tk.BOTH, expand=1) 
     self.output.config(font="sans 12", width=200, height=60, state = tk.DISABLED) 
     self.output.tag_config("error", foreground="#FF0000") 
     self.output.tag_config("info", foreground="#0000FF") 
     self.frame.pack(side=tk.RIGHT) 
#  self.reloadButton.pack(in_=self.frame) 
     self.startButton.pack(in_=self.frame) 
     self.stopButton.pack(in_=self.frame) 
     self.readfile() 
     pass 

    def readfile(self): 
     if self.start_stop: 
      with open(self.log_path, "r") as f: 
       tmp = f.readline().lower() 
       if self.oldline != tmp: #display spam only [email protected] 
        if "err" in tmp or "error" in tmp or "warn" in tmp and not "overlayeffect" in tmp and not "animation" in tmp: #Error filter to display 
         #print(tmp, end='', file=sys.stderr) 
         self.output.insert(tk.END, tmp) 
         index = "end - 1 lines" 
         self.output.tag_add("error", index) 
        elif "lua" in tmp: 
         self.output.insert(tk.END, tmp) 
         index = "end - 1 lines" 
         self.output.tag_add("info", index) 
        self.oldline = tmp 
       pass 
      self.after(5, self.readfile) 
      pass 
     pass 
# def reload(self): 
#  pass 
    def start(self): 
     self.start_stop = True 
     self.readfile() 
     pass 
    def stop(self): 
     self.start_stop = False 
     pass 
    pass 

if __name__ == "__main__": 
    root = tk.Tk() 
    root.title("Isaac Debug Helper") 
    root.geometry("650x500") 
    gui = GUI(root) 
    gui.mainloop() 
+0

エラーメッセージはありますか?それとも何もありませんか? – Cribber

+0

あなたは、それが適切に何を意味するのかをより具体的にすることができますか? – WhatsThePoint

+0

多分私は間違っていますが、self.output.pack()はself.output.config()の後に来てはいけませんか? – Cribber

答えて

0

は、作業完了コードはここにあります、助けてくれた皆様に感謝します!

#!/usr/bin/python3 
import tkinter as tk 
import sys 
import time 
from os.path import expanduser 

def get_log_path(): 
    p = "" 
    if sys.platform == "linux" or sys.platform == "linux2": 
     p = expanduser("~/.local/share/binding of isaac afterbirth+/log.txt") 
    elif sys.platform == "darwin": 
     p = expanduser("~/Library/Application Support/Binding of Isaac Afterbirth+/log.txt") 
    elif sys.platform == "win32": 
     p = expanduser("~/Documents/My Games/binding of isaac afterbirth+/log.txt") 
    return p 
    pass 

class GUI(tk.Frame): 
    def __init__(self, master=None): 
     super(GUI, self).__init__() 
     self.master = master 
     self.start_stop = False 
     self.log_path = get_log_path() 
     self.output = tk.Text(self) 
     self.menubar = tk.Menu(self) 
     self.menubar.add_command(label="Start", command=self.start) 
     self.menubar.add_command(label="Stop", command=self.stop) 
     master.config(menu=self.menubar) 
     self.oldline = " " 
     self.init_layout() 
     pass 

    def init_layout(self): 
     self.output.config(font="sans 10", width=200, height=60) 
     self.output.tag_config("error", foreground="#FF0000") 
     self.output.tag_config("warning", foreground="#00FF00") 
     self.output.tag_config("info", foreground="#0000FF") 
     self.output.pack() 
     self.readfile() 
     pass 

    def readfile(self): 
     if self.start_stop: 
      tmp = self.log_f.readline().lower() 
      if self.oldline != tmp: #display spam only [email protected] 
       self.output.config(state=tk.NORMAL) 
       if "err" in tmp or "error" in tmp and not "overlayeffect" in tmp and not "animation" in tmp: #Error filter to display 
        self.output.insert(tk.END, tmp, "error") 
       elif "lua" in tmp: 
        self.output.insert(tk.END, tmp, "info") 
       elif "warn" in tmp: 
        self.output.insert(tk.END, tmp, "warning") 
       self.oldline = tmp 
      self.output.see(tk.END) 
      self.update_idletasks() 
      self.after(5, self.readfile) 
      pass 
     pass 
    def start(self): 
     self.log_f = open(self.log_path, "r") 
     self.start_stop = True 
     self.readfile() 
     pass 
    def stop(self): 
     self.log_f.close() 
     self.start_stop = False 
     pass 
    pass 

if __name__ == "__main__": 
    root = tk.Tk() 
    root.title("Isaac Debug Helper") 
    root.geometry("650x500") 
    gui = GUI(root) 
    gui.pack() 
    gui.mainloop() 
+0

あなたはsuper(GUI、self).__ init __()に 'master'を渡すことを無視しています。この特定のケースでは無害です。なぜなら、マスタは 'root 'をマスタとして持つのと同じではないからです。しかし、一般的に、それを渡す習慣に入るべきです。 –

関連する問題