“在__init__调用中使用self.tr时,从未调用%S的RuntimeError:超类__init __()

时间:2014-02-10 08:12:29

标签: python pyqt translate

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

1 个答案:

答案 0 :(得分:2)

正如已经指出的那样,在初始化之前,你不能调用基类的方法。

解决此问题的一种方法是使用静态QApplication.translate方法(PyQt不提供静态QObject.tr方法):

    super(cl2,self).__init__(QtGui.QApplication.translate("cl2", "kuku"))