使用QTextEdit方法时出现TypeError

时间:2014-10-21 19:08:37

标签: python string user-interface qstring qtextedit

我使用PyQt构建了一个文本编辑器,我正在尝试向它显示一个字符串 我尝试使用QTextEdit.append()QTextEdit.setText()但我在每种情况下都得到TypeError。

我在做:

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

1 个答案:

答案 0 :(得分:1)

问题是必须使用类的实例调用类的方法(函数):

>>> 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/