2012-03-29 4 views
0

Я пытаюсь написать свое первое приложение на python с помощью файла GUI.py, созданного Qt Designer и pyuic4. После избиения головы против этой конкретной стены в течение нескольких недель, преследуя pyQt4 и QT, помогает файлы и документы, я не ближе к решению. Я думаю, что я могу быть в пути над моей опухшей и ушибленной головой. Если бы кто-то был так добр, чтобы просто дать мне понять, основываясь на том, как подключить входной сигнал клавиатуры и вывод приложения python в QplainTextEdit и QTextBrowser, я был бы навсегда в вашем долге.Как подключить ввод с клавиатуры и вывод приложения python в QPlainTextEdit и QTextBrowser

Я читал в течение нескольких дней на тему Qt и прочитал один или два учебника, но никто не дал информацию. что я искал. Но тома на кнопках (щелкнул), набирает, записывает и читает из XML-файлов.

Я уверен, что более компетентный человек мог бы констатироваться из материала, который я пытался глотать, достаточно, чтобы разобраться в этом, но, по-видимому, я не такой яркий, как хотелось бы верить.

Благодарим вас за любую помощь, которую вы можете оказать. Python2.7, 3.2 PyQt4, Pyside, PyQt-x11-gpl-4.9.1 на Linux Ubuntu 11.10. Я использую 2.7, PyQt4 до этого момента.

+0

Было бы лучше, если бы вы отправили пробную версию и где вы застряли. В противном случае есть множество примеров, которые поставляются с PyQt4. Проверьте папку примеров в каталоге установки PyQt4. – Avaris

+0

Был там, сделал это. Но безрезультатно. Что касается публикации моего кода, я не знаю, как начать работу. Я схватил кусочки и кусочки других примеров, которые я искал в Google, и некоторые из них зашифрованы в моем приложении, но получаю многочисленные сообщения об ошибках. Похоже, из информации, которую я обнаружил, что QProcess - это путь, но еще раз, сайты QT и PyQT4 могут быть написаны на санскрите, для всего, что я могу выбраться из него. –

+0

Если вы собираетесь запускать код на Python, 'QThread' - это способ. 'QProcess' для * внешних * программ. По крайней мере, покажите пример программы, которую вы хотите интегрировать с графическим интерфейсом. Все, что я придумал, может быть неактуальным для вашего дела и может также стать другим санскритским барахлом на вершине вашей сваи :). – Avaris

ответ

0

Вот простой скрипт для интеграции существующего скрипта python с графическим интерфейсом.

import sys 
from PyQt4 import QtGui, QtCore 
import time 

# some python function to integrate with GUI 
def factorial(n): 
    if n in (0,1): 
     return 1 
    else: 
     return n*factorial(n-1) 


# worker thread that will run our function 
class Worker(QtCore.QThread): 
    # custom signal that will be emitted when an output is ready 
    # 'int' instead of 'object' will result in C++ int and might overflow. 
    # object makes sure it is a python object 
    resultReady = QtCore.pyqtSignal(object) 

    def __init__(self, parent=None): 
     super(Worker, self).__init__(parent) 

    def setUp(self, n): 
     self.n = n 

    def run(self): 
     time.sleep(1) # dummy sleep to emulate 'working' status 
     self.result = factorial(self.n) 
     self.resultReady.emit(self.result) 


# Main GUI window 
class Main(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(Main, self).__init__(parent) 

     # setup widgets 
     self.input = QtGui.QLineEdit() 
     self.output = QtGui.QLineEdit() 
     self.button = QtGui.QPushButton('Calculate Factorial') 
     self.button.clicked.connect(self.calculate) 

     layout = QtGui.QVBoxLayout() 
     layout.addWidget(self.input) 
     layout.addWidget(self.output) 
     layout.addWidget(self.button) 

     centralWidget = QtGui.QWidget() 
     centralWidget.setLayout(layout) 
     self.setCentralWidget(centralWidget) 

     # setup worker thread and connect signal 
     self.worker = Worker(self) 
     self.worker.resultReady.connect(self.updateOutput) 

    def calculate(self): 
     try: 
      n = int(self.input.text()) 
      # setup thread 
      self.worker.setUp(n) 
      # start thread 
      self.worker.start() 
     except ValueError: 
      pass 

    def updateOutput(self, result): 
     # will be called when we have a result 
     # and put that result in appropriate widget 
     self.output.setText('%d' % result) 


if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    main = Main() 

    main.show() 
    sys.exit(app.exec_()) 
+0

AVARIS, СПАСИБО БОЛЬШОЕ ВРЕМЯ! Я только что вернулся на этот сайт и, низко и созерцательно, нашел этот самый милостивый подарок вашего времени. Я не могу дождаться его деления пополам. Пусть ваше племя увеличится! Предполагая, что вы в больших племенах. :) Я начну, своим обычным медленным и подталкивающим способом, сразу после того, как вы поблагодарили вас. Извините, если моя нехватка сообщений, возможно, ваша работа помогла бы мне чем-нибудь труднее, чем могло бы быть. Спасибо еще раз, и я дам вам знать, как я разобрался. –

Смежные вопросы