2014-01-20 7 views
-2

두 개의 모듈 test.py와 fill_combobox.py가 있습니다. fill_combobox는 콤보 상자의 기본값입니다. 모듈 간의 통신에는 여전히 문제가 있습니다.Python : AttributeError : type 객체 'Ui_Form'에는 'comboBox'속성이 없습니다.

test.py

 
from PyQt4 import QtCore, QtGui 
import fill_combobox 

try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    def _fromUtf8(s): 
     return s 

try: 
    _encoding = QtGui.QApplication.UnicodeUTF8 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig, _encoding) 
except AttributeError: 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig) 

class Ui_Form(object): 
    def setupUi(self, Form): 
     Form.setObjectName(_fromUtf8("Form")) 
     Form.resize(400, 300) 
     self.comboBox = QtGui.QComboBox(Form) 
     self.comboBox.setGeometry(QtCore.QRect(160, 120, 51, 25)) 
     self.comboBox.setObjectName(_fromUtf8("comboBox")) 

     self.retranslateUi(Form) 
     QtCore.QMetaObject.connectSlotsByName(Form) 

    def retranslateUi(self, Form): 
     Form.setWindowTitle(_translate("Form", "Form", None)) 
     fill_combobox.fill() 

if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    Form = QtGui.QWidget() 
    ui = Ui_Form() 
    ui.setupUi(Form) 
    Form.show() 
    sys.exit(app.exec_()) 

fill_combobox.py

코드에서
 
def fill(): 
    import test 
    for i in range(40): 
     test.Ui_Form.comboBox.addItems(str(i)) 
+1

직면 한 정확한 문제를 구체적으로 기술하십시오. 더 많은 도움을 얻을 수 있습니다 :-) – gravetii

답변

2

라인 :

test.Ui_Form.comboBox.addItems(str(i)) 

클래스 Ui_Form 아닌 Ui_Form 에서 접근입니다 자세는입니다. 이 클래스는 이 아니기 때문에에는 comboBox 속성이 있습니다.

form = QtGui.QWidget() 
ui = Ui_Form() 
ui.setupUi(form) 
form.show() 

당신은 form 인스턴스를 전에 for 루프를 그 코드 를 놓고, 루프 액세스에해야 사용할 경우 Ui_Form 클래스는 test.py의 말에 표시된 패턴을 사용합니다. 당신이 Ui_Form 인스턴스를 생성 방지 할 수 있습니다 그리고

class MyWidget(QWidget, Ui_Form): 
    def __init__(self, parent=None, ...): 
     super(MyWidget, self).__init__(parent) 
     self.setupUi(self) 

그냥 할 :


당신은 귀하의 사용자 정의 위젯을 작성하는 더 좋을 수도 많은 곳에서이 일을하는 경우

form = MyWidget() 
form.show() 
+0

좋습니다. 그것은 나를 위해 분명하다. 고마워. –

관련 문제