Форум сайта python.su
Здравствуйте,нужен простой пример , который выводит результат работы скрипта, в гуи окно
while True: v=raw_input(": ") print v
Отредактировано sanodin (Окт. 19, 2012 21:54:35)
Офлайн
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import subprocess from PyQt4 import QtCore, QtGui class ProcessCommunicationThread(QtCore.QThread): new_data_available = QtCore.pyqtSignal(str) process_terminated = QtCore.pyqtSignal() def __init__(self, process_args, encoding='cp866', parent=None): QtCore.QThread.__init__(self, parent) self._process_args = process_args self._pipe = None self._encoding = encoding def run(self): p = subprocess.Popen( self._process_args, bufsize=1, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) self._pipe = p while True: data = p.stdout.read(1) if not data: # EOF break self.new_data_available.emit(data.decode(self._encoding)) self.process_terminated.emit() self._pipe = None def write_data(self, data): if self._pipe: self._pipe.stdin.write(data.encode(self._encoding)) self._pipe.stdin.flush() self.new_data_available.emit(data) class MainWindow(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) layout = QtGui.QVBoxLayout(self) self.input_widget = QtGui.QLineEdit(returnPressed=self._on_edit_return_pressed) self.output_widget = QtGui.QPlainTextEdit(readOnly=True) layout.addWidget(self.input_widget) layout.addWidget(self.output_widget) thread = ProcessCommunicationThread(['python', 'some_program.py']) thread.new_data_available.connect(self.add_output_text) thread.process_terminated.connect( lambda : self.add_output_text('Process terminated\n') ) self._ps_thread = thread thread.start() def _on_edit_return_pressed(self): self._ps_thread.write_data(u'%s\n' % self.input_widget.text()) self.input_widget.setText('') def add_output_text(self, data): self.output_widget.moveCursor(QtGui.QTextCursor.End) self.output_widget.insertPlainText(data) if __name__ == "__main__": app = QtGui.QApplication(sys.argv) wnd = MainWindow() wnd.resize(480, 480) wnd.show() sys.exit(app.exec_())
Отредактировано reclosedev (Окт. 20, 2012 08:20:02)
Офлайн
Помог,спасибо, то что надо.
Отредактировано sanodin (Окт. 20, 2012 10:22:42)
Офлайн
sanodinКакое окно, запускаемой программы? Странно, какая ос и Python, случайно не 64 битные?
только окно запускается постоянно.
si = subprocess.STARTUPINFO() si.dwFlags = subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW si.wShowWindow = subprocess.SW_HIDE p = subprocess.Popen( self._process_args, bufsize=1, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=si )
Офлайн
Там все нормально работает,я сам не тот файл запускал,работает отлично,но
еще узнать надо,если переменная v уже определена,допустим
while True: v = u"привет" print v
Офлайн
sanodinНе совсем понял про переменную. Если программа выводит данные построчно, тогда можно читать целыми строками с помощью p.stdout.readline() и bufsize лучше по умолчанию оставить. Если же построчный вывод не нужен, а нужен только результат программы, то лучше p.communicate() использовать (можно и без потоков).
Там все нормально работает,я сам не тот файл запускал,работает отлично,но
еще узнать надо,если переменная v уже определена,допустимпросто вывод print в окноwhile True: v = u"привет" print v
Отредактировано reclosedev (Окт. 20, 2012 13:03:57)
Офлайн
Сам скрипт работает в цикле,переменная v принимает всегда вид строки,
def voice(): .... def speech(): .... while 1: print 'начало работы программы' v='привет' if v=='привет': print 'здравствуйте' speech.say(u'здравствуйте') ....
Отредактировано sanodin (Окт. 20, 2012 18:51:00)
Офлайн
Получается, что скрипт вызывать вообще не надо, просто хочешь существующий с консольным интерфейсом переписать на GUI?
Тогда лучше туториал полистать, потому что захочется сделать по своему и добавить что-то еще.
Офлайн
reclosedev
Получается, что скрипт вызывать вообще не надо, просто хочешь существующий с консольным интерфейсом переписать на GUI?
Тогда лучше туториал полистать, потому что захочется сделать по своему и добавить что-то еще.
Отредактировано sanodin (Окт. 20, 2012 20:18:48)
Офлайн