2014-10-21 2 views
0

Я построил текстовый редактор, используя PyQt, и я пытаюсь отобразить в нем строку Я попытался использовать QTextEdit.append(), QTextEdit.setText(), но я получаю TypeError в каждом случае.TypeError при использовании методов QTextEdit

Я делаю:

qstring_result = QString(string_result) 
QTextEdit.setText(qstring_result) 

Я получаю сообщение об ошибке:

TypeError: QTextEdit.append(QString): first argument of unbound method must have type 'QTextEdit' 

Я искал много, но не получил способ преобразования String type to QTextEdit type. Каков способ справиться с этим?

Код:

import sys 
from PyQt4 import QtGui, QtCore 
from PyQt4.QtCore import Qt 

class Main(QtGui.QMainWindow): 

    def __init__(self, parent = None): 
     QtGui.QMainWindow.__init__(self,parent) 

     self.initUI() 

    def initUI(self): 

     self.setGeometry(100,100,1030,800) 
     string_result = "This is correct output" 
     qstring_result = QString(string_result) 
     QTextEdit.setText(qstring_result) 
     self.setWindowTitle("Writer") 


def main(): 

    app = QtGui.QApplication(sys.argv) 

    main = Main() 
    main.show() 

    sys.exit(app.exec_()) 

if __name__ == "__main__": 
    main() 
+0

@matsjoyce Я новый для python, можете ли вы рассказать мне, как это сделать? – tryPy

+1

Не могли бы вы показать нам больше кода? Где-то вы должны иметь что-то вроде 'something = QTextEdit()'. Вам нужно сделать 'something.setTest (qstring_result)'. – matsjoyce

+0

@matsjoyce Я редактировал вопрос .. он содержит мой код сейчас. – tryPy

ответ

2

Проблема заключается в том, что метод (функция) класса должен быть вызван с экземпляром класса:

>>> QTextEdit # class 
<class 'PyQt4.QtGui.QTextEdit'> 
>>> QTextEdit() # instance 
<PyQt4.QtGui.QTextEdit object at 0x7f00ea379a68> 
>>> type(QTextEdit) 
<class 'PyQt4.QtCore.pyqtWrapperType'> 
>>> type(QTextEdit()) 
<class 'PyQt4.QtGui.QTextEdit'> 

сообщения об ошибках, показывают, что метод является «несвязанным», что означает, что он не имеет экземпляра:

>>> QTextEdit.setText # unbound 
<built-in function setText> 
>>> QTextEdit().setText # bound 
<built-in method setText of QTextEdit object at 0x7f00ea379a68> 

Следовательно, вы должны позвонить своему setText метод на примере QTextEdit. Вы можете создать экземпляр QTextEdit, позвонив ему. Вы должны вызвать конструктор QTextEdit с номером self, чтобы показать QTextEdit, что такое мастер (это окно). До сих пор ваша программа должна быть:

import sys 
from PyQt4 import QtGui, QtCore 
from PyQt4.QtCore import Qt 

class Main(QtGui.QMainWindow): 

    def __init__(self, parent = None): 
     QtGui.QMainWindow.__init__(self,parent) 
     self.initUI() 

    def initUI(self): 
     self.setGeometry(100, 100, 500, 500) 
     string_result = "This is correct output" 
     text_edit = QtGui.QTextEdit(self) 

Вы должны вызвать метод setText. Вы должны сделать text_edit.setText, а не QTextEdit.setText, так как text_edit - ваш экземпляр. Поэтому, следующая строка должна быть:

 text_edit.setText(string_result) 

Вы можете закончить свою программу:

 text_edit.setGeometry(0, 0, 500, 500) # this just sets the size to 500 x 500 
     self.setWindowTitle("Writer") 


def main(): 
    app = QtGui.QApplication(sys.argv) 
    main = Main() 
    main.show() 
    sys.exit(app.exec_()) 

if __name__ == "__main__": 
    main() 

Ваша программа затем производит этот вывод:

window

Кроме того, в качестве программы в общем виде учебника zetcode, возможно, стоит их проверить: http://zetcode.com/gui/pyqt4/