Как соединить ввод с клавиатуры и выход приложения Python с QPlainTextEdit и QTextBrowser - PullRequest
0 голосов
/ 29 марта 2012

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

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

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

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

1 Ответ

0 голосов
/ 04 апреля 2012

Вот простой скрипт для интеграции существующего скрипта Python с GUI.

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_())
...