Reputation: 9
I have an combobox at the top of UI. And I wanna change amount of next widgets after that ComboBox, i.e. rewrite GUI after selecting another item in ComboBox.
class Ui_RegisterWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(620, 492)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.comboBox = QtWidgets.QComboBox(self.centralwidget)
self.comboBox.setObjectName("comboBox")
self.comboBox.addItem("Worker")
self.comboBox.addItem("Teacher")
self.comboBox.addItem("Student")
self.verticalLayout_2.addWidget(self.comboBox)
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setObjectName("label")
self.verticalLayout.addWidget(self.label)
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setObjectName("label_2")
self.horizontalLayout.addWidget(self.label_2)
self.firstNameLine = QtWidgets.QLineEdit(self.centralwidget)
self.firstNameLine.setObjectName("firstNameLine")
self.horizontalLayout.addWidget(self.firstNameLine)
self.verticalLayout.addLayout(self.horizontalLayout)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setObjectName("label_3")
self.horizontalLayout_2.addWidget(self.label_3)
self.secondNameLine = QtWidgets.QLineEdit(self.centralwidget)
self.secondNameLine.setText("")
self.secondNameLine.setObjectName("secondNameLine")
self.horizontalLayout_2.addWidget(self.secondNameLine)
self.verticalLayout.addLayout(self.horizontalLayout_2)
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.label_4 = QtWidgets.QLabel(self.centralwidget)
self.label_4.setObjectName("label_4")
self.horizontalLayout_3.addWidget(self.label_4)
self.instituteLine = QtWidgets.QLineEdit(self.centralwidget)
self.instituteLine.setText("")
self.instituteLine.setObjectName("instituteLine")
self.horizontalLayout_3.addWidget(self.instituteLine)
self.verticalLayout.addLayout(self.horizontalLayout_3)
self.verticalLayout_2.addLayout(self.verticalLayout)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem)
self.registerButton = QtWidgets.QPushButton(self.centralwidget)
self.registerButton.setObjectName("registerButton")
self.verticalLayout_2.addWidget(self.registerButton)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 620, 17))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.toolBar = QtWidgets.QToolBar(MainWindow)
self.toolBar.setObjectName("toolBar")
MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
# connect to slots
self.registerButton.clicked.connect(self.Register)
self.comboBox.currentTextChanged.connect(self.ChangeUi)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "RegisterStudentWindow"))
self.label.setText(_translate("MainWindow", "Fill in registration blank"))
self.label_2.setText(_translate("MainWindow", "First name"))
self.firstNameLine.setPlaceholderText(_translate("MainWindow", "e.g. Sam"))
self.label_3.setText(_translate("MainWindow", "Surname"))
self.secondNameLine.setPlaceholderText(_translate("MainWindow", "e.g. Snow"))
self.label_4.setText(_translate("MainWindow", "Department"))
self.instituteLine.setPlaceholderText(_translate("MainWindow", "e.g. IKNI"))
self.registerButton.setText(_translate("MainWindow", "Register"))
self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar"))
def ChangeUi(self):
currentItem = self.comboBox.currentText()
#implement changing ui logic
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_RegisterWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
For example if I choose Worker I want to see fileds for inputs for First name, Second name and Department. If it was Student I expect to see fields for First name, Second name and Group name.
How should I get it?
Upvotes: 0
Views: 2643
Reputation: 31
Looks like you got your Ui_RegisterWindow class generated from .ui file. Do not rewrite the generated file directly cause all changes you made will be lost when you modify the ui file and regenerate. You can just subclass it in your gui class and reference the widgets to modify them. e.g.
class Gui(QMainWindow, Ui_RegisterWindow):
def __init__(self):
super(Gui, self).__init__()
self.setupUi(self)
self.comboBox.currentTextChanged.connect(self.do_something)
def do_something(self):
# do something here
if __name__ == "__main__":
app = QApplication(sys.argv)
win = Gui()
win.show()
sys.exit(app.exec_())
For the changing ui logic:
def do_something(self):
self.stackedwidget.setCurrentIndex(self.comboBox.currentIndex())
Upvotes: 2