Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 19, 2012 21:53:46

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

pyqt4 вывод

Здравствуйте,нужен простой пример , который выводит результат работы скрипта, в гуи окно

while True:
    v=raw_input(": ")
    print v
Заранее спасибо

Отредактировано sanodin (Окт. 19, 2012 21:54:35)

Офлайн

#2 Окт. 20, 2012 08:18:54

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

pyqt4 вывод

#!/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)

Офлайн

#3 Окт. 20, 2012 08:49:07

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

pyqt4 вывод

Помог,спасибо, то что надо.


Отредактировано sanodin (Окт. 20, 2012 10:22:42)

Офлайн

#4 Окт. 20, 2012 09:59:53

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

pyqt4 вывод

sanodin
только окно запускается постоянно.
Какое окно, запускаемой программы? Странно, какая ос и Python, случайно не 64 битные?

Если Win, можно вот так попробовать:
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
)

Офлайн

#5 Окт. 20, 2012 10:24:48

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

pyqt4 вывод

Там все нормально работает,я сам не тот файл запускал,работает отлично,но
еще узнать надо,если переменная v уже определена,допустим

while True:
    v = u"привет"
    print v
просто вывод print в окно

Офлайн

#6 Окт. 20, 2012 13:02:36

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

pyqt4 вывод

sanodin
Там все нормально работает,я сам не тот файл запускал,работает отлично,но
еще узнать надо,если переменная v уже определена,допустим
while True:
    v = u"привет"
    print v
просто вывод print в окно
Не совсем понял про переменную. Если программа выводит данные построчно, тогда можно читать целыми строками с помощью p.stdout.readline() и bufsize лучше по умолчанию оставить. Если же построчный вывод не нужен, а нужен только результат программы, то лучше p.communicate() использовать (можно и без потоков).
Если бы написали для чего конкретно это нужно, было бы проще советовать.

Отредактировано reclosedev (Окт. 20, 2012 13:03:57)

Офлайн

#7 Окт. 20, 2012 17:01:25

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

pyqt4 вывод

Сам скрипт работает в цикле,переменная v принимает всегда вид строки,

def voice():
    ....
def speech():
    ....
while 1:
    print 'начало работы программы'
    v='привет'
    if v=='привет': 
        print 'здравствуйте'
        speech.say(u'здравствуйте')
    ....
переменная v после каждого цикла принимает новое значение, но принтов несколько и надо что бы по ходу выполнения программы в окне отображались все принты по очереди
переменная обновляется из другой функции ,без нажатий клавиш . Программа работает с помощью голосового общения,переменная v результат возврата распознавания голоса,сама программа рабочая ,лезет в нет при просьбе рассказать погоду или новости или анекдот, если скажешь команду-выполнит,ответит…но простой гуй прикрутить хочется , а в этом я не соображаю

Отредактировано sanodin (Окт. 20, 2012 18:51:00)

Офлайн

#8 Окт. 20, 2012 19:50:49

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

pyqt4 вывод

Получается, что скрипт вызывать вообще не надо, просто хочешь существующий с консольным интерфейсом переписать на GUI?
Тогда лучше туториал полистать, потому что захочется сделать по своему и добавить что-то еще.

Офлайн

#9 Окт. 20, 2012 20:00:28

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

pyqt4 вывод

reclosedev
Получается, что скрипт вызывать вообще не надо, просто хочешь существующий с консольным интерфейсом переписать на GUI?
Тогда лучше туториал полистать, потому что захочется сделать по своему и добавить что-то еще.

Четвертый день листаю…и гугл красный уже…мне пример нужен,с ним работать и буду, и добавлять свое и переделывать..мне так легче…
Попадались примеры где либо просто окно либо с кучей кнопок и всякой ерунды,там черт ногу сломит, биндить надо и тд и тп

Вот с Вашим примером и работаю…)))
Понимание приходит…и туториалы конечно листаю..
Спасибо

Отредактировано sanodin (Окт. 20, 2012 20:18:48)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version