簡體   English   中英

PyQt5為每個組合框選項提供了不同的復選框集

[英]PyQt5 present different set of checkboxes with each combobox option

我正在嘗試使GUI應用程序根據組合框的先前選擇顯示不同的復選框,例如,如果用戶在組合框內選擇了“ IT”,則將向他/她顯示a,b,c復選框,如果用戶選擇了其他內容,他/她將看到x,y,z。

這是我的代碼,其中包含一些可能有用的注釋:

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

如果不更改應用程序的邏輯和設計,則可能如下所示:

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

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM