【问题标题】:PyQt5 present different set of checkboxes with each combobox optionPyQt5 为每个组合框选项呈现不同的复选框集
【发布时间】:2019-08-05 06:41:48
【问题描述】:

我正在尝试制作根据组合框的先前选择显示不同复选框的 GUI 应用程序,例如,如果用户在组合框中选择了“IT”,那么他/她将看到 a、b、c复选框,如果用户选择了其他选项,他/她将看到 x,y,z。

这是我的代码,其中包含一些可能有用的 cmets:

import sys
from PyQt5 import QtWidgets, QtGui

class MainWindow:
    def __init__(self):
        self.app = QtWidgets.QApplication(sys.argv)
        self.window = QtWidgets.QMainWindow()

        self.departmentLabel()
        self.departmentComboBox()
        self.tracksLabel()

        self.window.show()
        self.window.setGeometry(600,200,600,600)


        sys.exit(self.app.exec_())


    def departmentLabel(self):
        self.selectDepartmentlabel = QtWidgets.QLabel("<h3>Select department: </h3>", self.window)
        self.selectDepartmentlabel.setGeometry(20,20,300,30)

    def departmentComboBox(self):
        self.departmentComboBox = QtWidgets.QComboBox(self.window)
        self.departmentComboBox.addItem('IT')
        self.departmentComboBox.addItem('Business')
        self.departmentComboBox.move(450,20)
        self.departmentComboBox.activated[str].connect(self.tracksCheckBox)

    def tracksLabel(self):
        self.selectTracksLabel = QtWidgets.QLabel('<h3>Select tracks: </h3>', self.window)
        self.selectTracksLabel.setGeometry(20,60,300,30)


    def tracksCheckBox(self):
        track = self.departmentComboBox.currentText()
        self.testCheckBox = QtWidgets.QLineEdit('Testing', self.window) # Does not execute.
        self.window.show()
        if (track == "IT"):
            print("Condition is met") # oddly enough, this executes normally.
            self.itcCheckBox = QtWidgets.QCheckBox('ITC', self.window) # Does not execute.
            self.itcCheckBox.move(20,100)
            self.nsCheckBox = QtWidgets.QCheckBox('NS', self.window) # Does not execute.
            self.nsCheckBox.move(80,100)
            self.csCheckBox = QtWidgets.QCheckBox('CS', self.window) # Does not execute.
            self.csCheckBox.move(140,100)

main = MainWindow()

【问题讨论】:

    标签: python python-3.x pyqt pyqt5


    【解决方案1】:

    如果不改变你的应用程序的逻辑和设计,它可能是这样的:

    import sys
    from PyQt5 import QtWidgets, QtGui
    
    class MainWindow:
        def __init__(self):
            self.app = QtWidgets.QApplication(sys.argv)
            self.window = QtWidgets.QMainWindow()
    
            self.departmentLabel()
            self.departmentComboBox()
            self.tracksLabel()
    
            self.window.show()
            self.window.setGeometry(600,100,600,600)
    
            self.itcCheckBox = None      # +++
            self.nsCheckBox  = None      # +++
            self.csCheckBox  = None      # +++
    
            sys.exit(self.app.exec_())
    
    
        def departmentLabel(self):
            self.selectDepartmentlabel = QtWidgets.QLabel("<h3>Select department: </h3>", self.window)
            self.selectDepartmentlabel.setGeometry(20,20,300,30)
    
        def departmentComboBox(self):
            self.departmentComboBox = QtWidgets.QComboBox(self.window)
            self.departmentComboBox.addItem('IT')
            self.departmentComboBox.addItem('Business')
            self.departmentComboBox.move(450,20)
            self.departmentComboBox.activated[str].connect(self.tracksCheckBox)
    
        def tracksLabel(self):
            self.selectTracksLabel = QtWidgets.QLabel('<h3>Select tracks: </h3>', self.window)
            self.selectTracksLabel.setGeometry(20,60,300,30)
    
    
        def tracksCheckBox(self, text):   # + text
            print(text, " <---> ", self.departmentComboBox.currentText())
            track = self.departmentComboBox.currentText()
            self.testCheckBox = QtWidgets.QLineEdit('Testing '+text, self.window) # Does not execute.
    
    #        self.window.show()                           # ---
            self.testCheckBox.setGeometry(450,60,100,30)  # +++
            self.testCheckBox.show()                      # +++
    
            if self.itcCheckBox and self.nsCheckBox and self.csCheckBox: # +++
               self.itcCheckBox.deleteLater()
               self.itcCheckBox.hide()
               self.nsCheckBox.deleteLater()
               self.nsCheckBox.hide()
               self.csCheckBox.deleteLater()
               self.csCheckBox.hide()
    
            if (track == "IT"):
                print("Condition is met") # oddly enough, this executes normally.
                self.itcCheckBox = QtWidgets.QCheckBox('ITC', self.window) # Does not execute.
                self.itcCheckBox.move(20,100)
                self.nsCheckBox = QtWidgets.QCheckBox('NS', self.window) # Does not execute.
                self.nsCheckBox.move(80,100)
                self.csCheckBox = QtWidgets.QCheckBox('CS', self.window) # Does not execute.
                self.csCheckBox.move(140,100)
    # +++ vvvvvvvvvvvvvvvvvvvvvv          
            else:
                self.itcCheckBox = QtWidgets.QCheckBox('XXXX', self.window) # Does not execute.
                self.itcCheckBox.move(20,100)
                self.nsCheckBox = QtWidgets.QCheckBox('Yyyy', self.window) # Does not execute.
                self.nsCheckBox.move(80,100)
                self.csCheckBox = QtWidgets.QCheckBox('Zzzz', self.window) # Does not execute.
                self.csCheckBox.move(140,100)        
    
            self.itcCheckBox.show()
            self.nsCheckBox.show()
            self.csCheckBox.show()
    # +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^
    
    main = MainWindow()
    

    【讨论】:

      猜你喜欢
      • 2016-03-22
      • 1970-01-01
      • 2011-07-25
      • 2015-09-30
      • 2022-10-14
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多