使用QTextEdit方法时出现TypeError

0 投票
1 回答
1066 浏览
提问于 2025-04-28 21:10

我用PyQt做了一个文本编辑器,现在想在里面显示一段字符串。我试过用 QTextEdit.append()QTextEdit.setText(),但每次都出现了类型错误。

我写的代码是:

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

然后我收到了一个错误:

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

我搜索了很多,但还是没找到把 String类型转换为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,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 个回答

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>

因此,你必须在一个 QTextEdit 的实例上调用你的 setText 方法。你可以通过调用它来创建一个 QTextEdit 的实例。你需要用 self 来调用 QTextEdit 的构造函数,这样 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/

撰写回答