如何在Pyqt5的QComboBox中选择一个选项时动态添加小部件

2024-09-30 14:21:09 发布

您现在位置:Python中文网/ 问答频道 /正文

当用户从QComboBox中选择一个特定的项目时,我想在GUI中添加小部件。在

使用组合框中不同的选项Pip config,我希望GUI看起来像下面的图像。在右图中,有一个项目的额外小部件Multi-pip。我还想知道额外的小部件的位置,如右图所示。在

GUI_1GUI_2

如何动态添加这些小部件?请查找下面的代码。在

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt, QRect

class Example(QWidget): 

def __init__(self):
    super(Example, self).__init__()        
    self.initUI()        

def initUI(self):

    vbox = QVBoxLayout()

    CpsLabel = QLabel()
    CpsLabel.setText("<font size = 12>Cps</font>")
    CpsLabel.setAlignment(Qt.AlignCenter)
    CpsLabel.setTextFormat(Qt.RichText)
    CpsPipConfigLabel = QLabel('Pip config:    ')
    CpsPipConfigComboBox = QComboBox()
    CpsPipConfigComboBox.addItems(['Single pip', 'Dual pip', 'Multi pip'])
    CpsPipConfigComboBox.setCurrentIndex(2)
    CpsChannel = QLabel('Cps channel:    ')
    CpsChannelComboBox = QComboBox()
    CpsChannelComboBox.addItems(['A', 'B', 'C', 'D'])  
    CpsChannelComboBox.setCurrentIndex(0) 
    CpsTotalTeethLabel = QLabel('Total teeth:    ')             
    CpsTotalTeethEdit = QLineEdit()
    CpsTotalTeethEdit.setFixedWidth(50)
    CpsTotalTeethEdit.setPlaceholderText('18')
    CpsTotalTeethEdit.setValidator(QIntValidator())                
    CpsMissingTeethLabel = QLabel('Missing teeth:    ')             
    CpsMissingTeethEdit = QLineEdit()
    CpsMissingTeethEdit.setFixedWidth(50)
    CpsMissingTeethEdit.setPlaceholderText('1')
    CpsMissingTeethEdit.setValidator(QIntValidator())                           

    vbox.addWidget(CpsLabel)
    vbox.addStretch()

    CpsQHBox1 = QHBoxLayout()
    CpsQHBox1.setSpacing(0)
    CpsQHBox1.addStretch()
    CpsQHBox1.addWidget(CpsPipConfigLabel)
    CpsQHBox1.addWidget(CpsPipConfigComboBox)
    CpsQHBox1.addStretch()
    vbox.addLayout(CpsQHBox1)
    vbox.addStretch()

    CpsQHBox2 = QHBoxLayout()
    CpsQHBox2.setSpacing(0)
    CpsQHBox2.addStretch()
    CpsQHBox2.addSpacing(20)
    CpsQHBox2.addWidget(CpsTotalTeethLabel)
    CpsQHBox2.addWidget(CpsTotalTeethEdit)
    CpsQHBox2.addStretch()
    CpsQHBox2.addWidget(CpsMissingTeethLabel)
    CpsQHBox2.addWidget(CpsMissingTeethEdit)        
    CpsQHBox2.addStretch()
    vbox.addLayout(CpsQHBox2)
    vbox.addStretch()       

    CpsQHBox3 = QHBoxLayout()
    CpsQHBox3.setSpacing(0)
    CpsQHBox3.addStretch()
    CpsQHBox3.addWidget(CpsChannel)
    CpsQHBox3.addWidget(CpsChannelComboBox)
    CpsQHBox3.addStretch()
    vbox.addLayout(CpsQHBox3)
    vbox.addStretch()        

    self.setLayout(vbox)
    self.setGeometry(200, 100, 300, 300)
    self.setWindowTitle('Steady state data processing') 
    self.setWindowIcon(QIcon('duty_vs_suction_map_sum.png'))                    

    self.setAutoFillBackground(True)
    p = self.palette()
    p.setColor(self.backgroundRole(), QColor(255,250,100))
    # p.setColor(self.backgroundRole(), Qt.blue)
    self.setPalette(p)
    self.show()

if __name__ == '__main__':

app = QApplication(sys.argv)
ex = Example()    
sys.exit(app.exec_())

Tags: pipimportself部件qtvboxaddwidgetqlabel
1条回答
网友
1楼 · 发布于 2024-09-30 14:21:09

我建议你设置这些小部件,把它们放在一开始,就像你有它们一样,但是设置它们不可见。然后创建一个方法,根据qcombobox的当前文本设置相应的小部件可见,并将其连接到qcombobox的激活信号。在

您还需要在几乎每个对象的前面添加self,以便可以从其他方法引用它。在

class Example(QWidget):

    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):
        # setup code here...

        self.CpsTotalTeethEdit.setVisible(False)
        self.CpsTotalTeethLabel.setVisible(False)

        self.CpsPipConfigComboBox.activated.connect(self.setup_total_teeth)

        self.show()

    def setup_widgets(self):
        if self.CpsPipConfigComboBox.currentText() == "Multi pip":
            self.CpsTotalTeethLabel.setVisible(True)
            self.CpsTotalTeethEdit.setVisible(True)

通过将项设置为不可见而不是使用此方法添加它们,还可以将它们设置为当cobox的位置不适合它们时不可见。在

相关问题 更多 >