2014-02-10 14 views
0

在PyQt代碼中,當self.tr用於調用祖先類的初始值時,出現錯誤 被生產。沒有self.tr的調用起作用。如下所示:在__init__中使用self.tr時,「RuntimeError:超類__init __()%S從未被調用過」

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_()) 
+2

又是什麼'self.tr(「庫庫」)'返回?顯然你不能在調用'QtGui.QWidget .__ init __()'之前調用'self.tr()',所以就像醫生對那個問如何讓她停止傷害的女人說:「不要按那裏「。 –

+1

在調用'super(cl2,self).__ init __()'後用'self.edit()'*設置'QtGui.QLineEdit()'對象的文本。 –

+0

我的問題是如果有可能在單一通話中完成所有事情 –

回答

2

正如已經指出的,在初始化之前不能調用基類的方法。要解決此問題

一種方法是使用靜態QApplication.translate方法(PyQt的不提供靜態QObject.tr法):

super(cl2,self).__init__(QtGui.QApplication.translate("cl2", "kuku")) 
相關問題