在PyQt的代码中,当self.tr用于调用祖先类的init时, 产生错误。没有self.tr的呼叫有效。见下文:
import sys
from PyQt4 import QtGui
class cl1(QtGui.QWidget):
def __init__(self,txt):
super(cl1,self).__init__()
self.edit = QtGui.QLineEdit(txt)
lay = QtGui.QVBoxLayout()
lay.addWidget(self.edit)
self.setLayout(lay)
self.show()
class cl2(cl1):
def __init__(self):
# This line does not work:
super(cl2,self).__init__(self.tr("kuku"))
# If this line is used instead, it works:
# super(cl2,self).__init__("kuku")
app = QtGui.QApplication(sys.argv)
w = cl2()
sys.exit(app.exec_())
答案 0 :(得分:2)
正如已经指出的那样,在初始化之前,你不能调用基类的方法。
解决此问题的一种方法是使用静态QApplication.translate方法(PyQt不提供静态QObject.tr
方法):
super(cl2,self).__init__(QtGui.QApplication.translate("cl2", "kuku"))