필자는 PyQt의 탭 뷰와 MDI에 대해 배우고 있습니다. 탭 중 하나에있는 행 편집 위젯을 참조하는 방법이 혼란 스럽습니다. 내가 객체 관리자 볼 때 나는 참조 :MDI 애플리케이션의 속성 참조하기
MainWindow
centralwidget
mdiArea
subwindow
gridlayout
wt1
내가 코드 wt1
를 참조 바랍니다. 어떻게해야합니까?
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\218003107\AppData\Local\Continuum\Anaconda\lib\site- packages\spyderlib\widgets\externalshell\sitecustomize.py", line 580, in runfile
execfile(filename, namespace)
File "C:/Users/218003107/callphreeqcInput.pyw", line 38, in <module>
myapp=MyForm()
File "C:/Users/218003107/callphreeqcInput.pyw", line 10, in __init__
self.connect(self.ui.wt1,QtCore.SIGNAL('textChanged()'),self.wtResult)
AttributeError: 'Ui_MainWindow' object has no attribute 'wt1'
내 코드는 다음과 같습니다 :
나는 다음과 같은 오류를 받고 있어요
import sys
from PyQt4 import QtCore, QtGui
from phreqMDI import Ui_MainWindow
class MyForm(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MyForm,self).__init__(parent)
self.ui=Ui_MainWindow()
self.ui.setupUi(self)
self.connect(self.ui.wt1,QtCore.SIGNAL('textChanged()'),self.wtResult)
self.connect(self.ui.wt2,QtCore.SIGNAL('textChanged()'),self.wtResult)
self.connect(self.ui.wt3,QtCore.SIGNAL('textChanged()'),self.wtResult)
self.connect(self.ui.wt4,QtCore.SIGNAL('textChanged()'),self.wtResult)
def wtResult(self):
if len(self.ui.wt1.text())!=0:
a=float(self.ui.wt1.text())
else:
a=0
if len(self.ui.wt2.text())!=0:
b=float(self.ui.wt2.text())
else:
b=0
if len(self.ui.wt3.text())!=0:
c=float(self.ui.wt3.text())
else:
c=0
if len(self.ui.wt4.text())!=0:
c=float(self.ui.wt4.text())
else:
d=0
sum=a+b+c+d
self.ui.wt_total.setText(str(sum))
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp=MyForm()
myapp.show()
app.exec_()
Qt 디자이너에서 위젯을 추가하는 두 가지 방법, 즉 다중 상속 및 구성이 혼합되어 있습니다. 'Ui_MainWindow'에서 상속 할 필요는 없지만 다른 문제를 수정하지는 않습니다. composition 메소드를 사용하면 Qt Designer의 모든 위젯이 'ui' 객체의 속성이됩니다. 그러나, 나는 진짜 문제는 당신이'phreqMDI' 모듈을 약간 변경 한 후에 다시 생성하지 않았다는 것입니다 (즉,'pyuic'을 다시 실행할 필요가 있습니다). – ekhumoro
권장대로 UI_MainWindow를 삭제했습니다. 나는 또한 pyuic4를 다시 달렸다. 이번에는 프로그램이 오류를 걷어 내지 않았습니다. 주 창이 열렸지 만 위젯이나 탭이 없습니다. 내가 볼 수있는 것은 회색 MDI 영역이있는 메인 윈도우처럼 보입니다. Qt 디자이너에서 미리 볼 때 모든 위젯과 두 개의 서브 윈도우를 볼 수 있습니다. 내 응용 프로그램에는 두 개의 서브 윈도우와 하나의 서브 윈도우에 많은 행 편집 및 레이블 위젯이 있습니다. 왜 내가 서브 우드 또는 위젯을 보지 않을지에 대한 제안 사항이 있습니까? – user3720101
질문에 디자이너 ui 파일을 추가하십시오. 잘못된 것을 확인하려고 노력할 것입니다. – ekhumoro