Issue
I want to create a gui that its options-within depends on the user inputs. For example, I have totally 4 checkboxes in my gui (below snapshot); if user selects Group1 (in a separate gui, not shown here), the following gui appears but only "Group1, option1" and "Group1, option2" are shown (in another words, there will be no sign of Group2 labels and checkboxes). In another scenario, if user select Group2 (again, in a separate gui, not shown here), the following gui appears but this time, only "Group2" labels and checkboxes appears, and "Group1" related stuff will hide.
here is my code:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(341, 216)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton_1 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_1.setGeometry(QtCore.QRect(170, 80, 111, 23))
self.pushButton_1.setObjectName("pushButton_1")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(170, 130, 111, 23))
self.pushButton_2.setObjectName("pushButton_2")
self.checkBox_1 = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox_1.setGeometry(QtCore.QRect(125, 50, 17, 17))
self.checkBox_1.setChecked(True)
self.checkBox_1.setObjectName("checkBox_1")
self.label_1 = QtWidgets.QLabel(self.centralwidget)
self.label_1.setGeometry(QtCore.QRect(30, 50, 80, 13))
self.label_1.setObjectName("label_1")
self.checkBox_2 = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox_2.setGeometry(QtCore.QRect(125, 80, 17, 17))
self.checkBox_2.setChecked(False)
self.checkBox_2.setObjectName("checkBox_2")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(30, 80, 80, 13))
self.label_2.setObjectName("label_2")
self.checkBox_3 = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox_3.setEnabled(False)
self.checkBox_3.setGeometry(QtCore.QRect(125, 110, 17, 17))
self.checkBox_3.setChecked(False)
self.checkBox_3.setObjectName("checkBox_3")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(30, 110, 80, 13))
self.label_3.setObjectName("label_4")
self.checkBox_4 = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox_4.setEnabled(False)
self.checkBox_4.setGeometry(QtCore.QRect(125, 140, 17, 17))
self.checkBox_4.setChecked(False)
self.checkBox_4.setObjectName("checkBox_4")
self.label_4 = QtWidgets.QLabel(self.centralwidget)
self.label_4.setGeometry(QtCore.QRect(30, 140, 80, 13))
self.label_4.setObjectName("label_4")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 341, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton_1.setText(_translate("MainWindow", "OK"))
self.pushButton_2.setText(_translate("MainWindow", "Cancel"))
self.checkBox_1.setText(_translate("MainWindow", "Auto"))
self.label_1.setText(_translate("MainWindow", "Group1, option1"))
self.checkBox_2.setText(_translate("MainWindow", "Auto"))
self.label_2.setText(_translate("MainWindow", "Group1, option2"))
self.checkBox_3.setText(_translate("MainWindow", "Auto"))
self.label_3.setText(_translate("MainWindow", "Group2, option1"))
self.checkBox_4.setText(_translate("MainWindow", "Auto"))
self.label_4.setText(_translate("MainWindow", "Group2, option2"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
I can implement this by creating two GUIs; one only for "Group1" and the other one for "Group2". But I would prefer to have one general GUI that handle both scenarios.
Solution
You can separate the creation of those checkbox to another method. Then decide to pass which group to the method depended on user input.
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(341, 216)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton_1 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_1.setGeometry(QtCore.QRect(170, 80, 111, 23))
self.pushButton_1.setObjectName("pushButton_1")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(170, 130, 111, 23))
self.pushButton_2.setObjectName("pushButton_2")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 341, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
# Create function to add checkboxes based on input.
def selectGroup(self, group):
_translate = QtCore.QCoreApplication.translate
self.checkBox_1 = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox_1.setGeometry(QtCore.QRect(125, 50, 17, 17))
self.checkBox_1.setChecked(True)
self.checkBox_1.setObjectName("checkBox_1")
self.label_1 = QtWidgets.QLabel(self.centralwidget)
self.label_1.setGeometry(QtCore.QRect(30, 50, 80, 13))
self.label_1.setObjectName("label_1")
self.checkBox_2 = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox_2.setGeometry(QtCore.QRect(125, 80, 17, 17))
self.checkBox_2.setChecked(False)
self.checkBox_2.setObjectName("checkBox_2")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(30, 80, 80, 13))
self.label_2.setObjectName("label_2")
self.label_1.setText(f"Group{group}, option1")
self.label_2.setText(f"Group{group}, option2")
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton_1.setText(_translate("MainWindow", "OK"))
self.pushButton_2.setText(_translate("MainWindow", "Cancel"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
ui.selectGroup("1") # Here you passed the input that you get from user.
MainWindow.show()
sys.exit(app.exec_())
Answered By - Ananta
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.