2016-11-24 17 views
2

私はPython(3)GUIプログラムをtkinterで作成していますが、リダイレクト機能を使ってすべての印刷文をGUIのスクロールテキストボックスに送ります。拡張子.pywのtkinterウィンドウへのstdout(print)コマンドの出力

これは(Tkinterのウィンドウと同じクラスの)リダイレクト機能である:

def redirector(self,inputStr): 
    self.txt.insert(tk.INSERT, inputStr) 
    self.txt.update() 
    self.txt.see(tk.END) 

そして、私は出力のリダイレクトを開始したいときに、私はこの行を追加します。

sys.stdout.write = self.redirector 

しかし、ファイルの名前を.pywに変更すると、テキストボックスに何も表示されません。テキストをGUIウィンドウに正しく表示する方法を提案してください。

+0

あなたはあなたのファイル '.py'を正しく呼び出すと動作するのでしょうか? –

+0

@ Jean-FrançoisFabreはい、そうです。 –

+0

改訂の回答をお願いします。 – Jovito

答えて

1

あなたがWindows上.pywファイルを実行すると、あなたのプログラムを実行する実行ファイルが実際に内部WinMain()を呼び出すことによって、アプリケーションを初期化し、その作成されませんpythonw.exe、ですので、あなたの印刷の呼び出しが動作しない理由がありますコンソール。コンソールは標準IOストリームを意味しないので、sys.stdoutは未定義です。

代わりに、tk.Textのサブクラスを作成し、write()flush()関数をインスタンスメソッドとして定義することをお勧めします。それではサブクラスのインスタンスにsys.stdoutを設定すれば、すべてがうまくいくはずです。

import sys 
import tkinter as tk 


class TextOut(tk.Text): 

    def write(self, s): 
     self.insert(tk.CURRENT, s) 

    def flush(self): 
     pass 


if __name__ == '__main__': 
    root = tk.Tk() 
    text = TextOut(root) 
    sys.stdout = text 
    text.pack(expand=True, fill=tk.BOTH) 
    root.mainloop() 
+0

これはプログラムで実装する必要があります。プログラムでは、tkinterウィンドウがApp()というクラスを実行しています。これはどうすればいいですか?申し訳ありませんが、私はPythonには本当に新しいです。 –

+0

@NikhilRamakrishnanあなたのフルコードへのリンクを教えてください。 – Jovito

+0

ここにコードです - http://pastebin.com/CEXhSCcH –

関連する問題