使用QTextEdit方法时出现TypeError
我用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()
你的程序会输出这个结果:
另外,由于你的程序大致上是一个 zetcode 教程的形式,值得去看看他们的内容: http://zetcode.com/gui/pyqt4/