2016-11-24 4 views
2

Я делаю программу Python (3) GUI с помощью tkinter, и я использую функцию перенаправления, чтобы направлять все мои операторы печати в текстовое поле с графическим интерфейсом графического интерфейса.Печать команд stdout (print) в окне tkinter с расширением .pyw

Это функция переадресации (в том же классе, что и окна 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

Причина, почему ваши печатные звонки не работают, потому что при запуске .pyw файл на Windows, исполняемый файл, который работает ваша программа на самом деле pythonw.exe, который внутренне инициализирует приложение, вызвав WinMain(), и поэтому не создает консоль. Никакая консоль не означает стандартные потоки ввода-вывода, поэтому 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 –