나는 PyQT4에서 새로운 것이고 나는 아래의 문제에 직면했다.PyQT4 - 메인 창에서 위젯 바꾸기
일부 응용 프로그램은 한 화면에 사용자 데이터를 수집하고 버튼 클릭시 다음 화면을 표시해야합니다. 먼저 위젯
main.py
app = QtGui.QApplication(sys.argv)
#here I create main window with inherited class
w = SAN_MainWindow()
#and apply some basic geometry
w.SetUI()
#here first screen rendered and button event applyed
w.ApplyWidget(SAN_Intro())
w.show()
sys.exit(app.exec_())
렌더링 올바르게 발생한다.
는 SAN_MainWindow.py :
class SAN_MainWindow(QtGui.QMainWindow):
def __init__(self):
super(SAN_MainWindow, self).__init__()
def SetUI(self):
self.setObjectName(_fromUtf8("MainWindow"))
self.resize(789, 602)
self.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
self.central_widget = QtGui.QWidget(self)
self.central_widget.setObjectName(_fromUtf8("central_widget"))
self.setCentralWidget(self.central_widget)
def ApplyWidget(self, widget):
self.active_widget = widget
self.active_widget.Setup(self.central_widget)
self.active_widget.SetControls(self)
def RemoveActiveWidget(self):
self.active_widget.widget().setParent(None)
def ShowInstruction(self):
self.RemoveActiveWidget()
self.ApplyWidget(SAN_Instruction())
#self.centralWidget().update() <- Problem
SAN_Intro.py :
:class SAN_Intro(object):
def __init__(self):
super(SAN_Intro, self).__init__()
def Setup(self, widget):
self.gridLayoutWidget = QtGui.QWidget(widget)
self.gridLayoutWidget.setGeometry(QtCore.QRect(80, 30, 638, 451))
self.gridLayoutWidget.setObjectName(_fromUtf8("gridLayoutWidget"))
self.gridLayout = QtGui.QGridLayout(self.gridLayoutWidget)
self.gridLayout.setContentsMargins(-1, 16, 16, -1)
self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
#a lot of form inputs instructions....
def SetControls(self, main_window):
QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), main_window.ShowInstruction)
def widget(self):
return self.gridLayoutWidget
SAN_Instruction 설치 프로그램에서 다른 명령을하지만, 거의 SAN_Intro과 동일
class SAN_Instruction(object):
def __init__(self):
super(SAN_Instruction, self).__init__()
def Setup(self, widget):
self.verticalLayoutWidget = QtGui.QWidget(widget)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(40, 20, 591, 521))
self.verticalLayoutWidget.setObjectName(_fromUtf8("verticalLayoutWidget"))
self.verticalLayout = QtGui.QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setMargin(0)
self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
#a lot of form inputs instructions....
def SetControls(self, main_window):
pass
def widget(self):
return self.verticalLayoutWidget
그리고 여기에 질문이 있습니다 : 두 번째 (SAN_Instruction으로 생성) 위젯을 어떻게 표시해야합니까? mainwindow/centralwidget/parent를 업데이트/표시/다시 채색하려고했습니다. 버튼 클릭으로 얻은 것은 self.RemoveActiveWidget()입니다.
아마도 내 개념이 잘못 되었나요? 사전
파이썬의 코드는 탭이 아니라 4 개의 공백으로 들여 쓰기되어야합니다. [PEP8] (http://www.python.org/dev/peps/pep-0008/)을보십시오. 게시 할 때이 규칙을 존중해야합니다. (이번에 당신을 위해 고쳐졌습니다!) – mac
고마워, 나는 그것을 염두에 두겠다. – user3777