Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pyqt中更改组合框项后动态更改UI_Python_Pyqt_Qcombobox - Fatal编程技术网

Python 在pyqt中更改组合框项后动态更改UI

Python 在pyqt中更改组合框项后动态更改UI,python,pyqt,qcombobox,Python,Pyqt,Qcombobox,我在UI的顶部有一个组合框。我想在组合框之后更改下一个小部件的数量,即在选择组合框中的另一项后重写GUI class Ui_RegisterWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(620, 492) self.centralwidget = QtWidgets.QWidge

我在UI的顶部有一个组合框。我想在组合框之后更改下一个小部件的数量,即在选择组合框中的另一项后重写GUI

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

例如,如果我选择Worker,我想查看文件,以获取名字、第二个名字和部门的输入。如果是学生,我希望看到名字、第二个名字和组名字段


我应该如何获得它?

看起来您的Ui\u RegisterWindow类是从.Ui文件生成的。不要直接重写生成的文件,因为在修改ui文件并重新生成时,所做的所有更改都将丢失。 您可以在gui类中将其子类化,并引用小部件来修改它们。 e、 g

对于不断变化的ui逻辑:

你可以试试QStackedWidget。在stackedwidget的不同页面中添加不同的小部件,并根据组合框的内容将当前页面设置为。 如果您只希望标签上有不同的文本,您可以引用它和setText。
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_())
    def do_something(self):
        self.stackedwidget.setCurrentIndex(self.comboBox.currentIndex())