Ash
Ash

Reputation: 35

pySide QComboBox refresh

from PySide import QtGui, QtCore

def listItems():
    itemList = ("first","second","etc..")
    return itemList

class tabDialog(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)

        tabWidget = QtGui.QTabWidget()
        tabWidget.addTab(mainTab(), self.tr("Main"))
        tabWidget.addTab(secondTab(), self.tr("Second "))

        mainLayout = QtGui.QVBoxLayout()
        mainLayout.addWidget(tabWidget)
        self.setLayout(mainLayout)

class mainTab(QtGui.QWidget):
    def __init__(self,  parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.createGroup = QtGui.QGroupBox(self.tr("Add Item to list"))
        self.fileNameEdit = QtGui.QLineEdit(self)        
        self.fileNameEdit.setPlaceholderText("new item")


        self.createButton = QtGui.QPushButton('add',self)
        #self.createButton.clicked.connect(self.additemToList)

        self.createLayout = QtGui.QGridLayout()
        self.createLayout.addWidget(self.fileNameEdit,1,2)
        self.createLayout.addWidget(self.createButton,1,3)
        self.setLayout(self.createLayout) 
        self.createGroup.setLayout(self.createLayout)      


        self.addGroup = QtGui.QGroupBox(self.tr("list items"))
        self.projectLabel = QtGui.QLabel(self.tr("item : "))
        self.projectListCombo = QtGui.QComboBox(self)
        self.projectListCombo.addItems(listItems())
        self.addLayout = QtGui.QHBoxLayout()
        self.addLayout.addWidget(self.projectLabel)
        self.addLayout.addWidget(self.projectListCombo) 
        self.addGroup.setLayout(self.addLayout)

        self.mainLayout = QtGui.QVBoxLayout()
        self.mainLayout.addWidget(self.createGroup)
        self.mainLayout.addWidget(self.addGroup)        
        self.setLayout(self.mainLayout)


class secondTab(QtGui.QWidget):
    def __init__(self,  parent=None):
        QtGui.QWidget.__init__(self, parent)      
        self.initUI()


    def initUI(self):     

        self.addGroup = QtGui.QGroupBox(self.tr("list items"))
        self.projectLabel = QtGui.QLabel(self.tr("item : "))
        self.projectListCombo = QtGui.QComboBox(self)
        self.projectListCombo.addItems(listItems())
        self.addLayout = QtGui.QHBoxLayout()
        self.addLayout.addWidget(self.projectLabel)
        self.addLayout.addWidget(self.projectListCombo) 
        self.addGroup.setLayout(self.addLayout)

        self.mainLayout = QtGui.QVBoxLayout()
        self.mainLayout.addWidget(self.addGroup)        
        self.setLayout(self.mainLayout)



tabdialog = tabDialog()
tabdialog.show()

Have 2 tabs .In first tab is line for text , button for add item and combo box and in second tab is just combo box. Both combo box contain same list items. If add item to list ,need refresh both combo box

Upvotes: 0

Views: 823

Answers (1)

NorthCat
NorthCat

Reputation: 9937

You can use QComboBox::addItem:

from PySide import QtGui, QtCore
import sys

def listItems():
    itemList = ("first","second","etc..")
    return itemList


class tabDialog(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)

        self.tabWidget = QtGui.QTabWidget()
        self.mainTab = mainTab(self)
        self.secondTab = secondTab(self)

        self.tabWidget.addTab(self.mainTab, self.tr("Main"))
        self.tabWidget.addTab(self.secondTab, self.tr("Second "))

        mainLayout = QtGui.QVBoxLayout()
        mainLayout.addWidget(self.tabWidget)
        self.setLayout(mainLayout)

    def additemToList(self):
        item = self.mainTab.fileNameEdit.text()
        self.mainTab.projectListCombo.addItem(item)
        self.secondTab.projectListCombo.addItem(item)


class mainTab(QtGui.QWidget):
    def __init__(self,  parent=tabDialog):
        QtGui.QWidget.__init__(self, parent)
        self.q = 1234
        self.createGroup = QtGui.QGroupBox(self.tr("Add Item to list"))
        self.fileNameEdit = QtGui.QLineEdit(self)
        self.fileNameEdit.setPlaceholderText("new item")


        self.createButton = QtGui.QPushButton('add',self)
        self.createButton.clicked.connect(parent.additemToList)

        self.createLayout = QtGui.QGridLayout()
        self.createLayout.addWidget(self.fileNameEdit,1,2)
        self.createLayout.addWidget(self.createButton,1,3)
        self.setLayout(self.createLayout)
        self.createGroup.setLayout(self.createLayout)


        self.addGroup = QtGui.QGroupBox(self.tr("list items"))
        self.projectLabel = QtGui.QLabel(self.tr("item : "))
        self.projectListCombo = QtGui.QComboBox(self)
        self.projectListCombo.addItems(listItems())
        self.addLayout = QtGui.QHBoxLayout()
        self.addLayout.addWidget(self.projectLabel)
        self.addLayout.addWidget(self.projectListCombo)
        self.addGroup.setLayout(self.addLayout)

        self.mainLayout = QtGui.QVBoxLayout()
        self.mainLayout.addWidget(self.createGroup)
        self.mainLayout.addWidget(self.addGroup)
        self.setLayout(self.mainLayout)



class secondTab(QtGui.QWidget):
    def __init__(self,  parent=tabDialog):
        QtGui.QWidget.__init__(self, parent)
        self.initUI()


    def initUI(self):

        self.addGroup = QtGui.QGroupBox(self.tr("list items"))
        self.projectLabel = QtGui.QLabel(self.tr("item : "))
        self.projectListCombo = QtGui.QComboBox(self)
        self.projectListCombo.addItems(listItems())
        self.addLayout = QtGui.QHBoxLayout()
        self.addLayout.addWidget(self.projectLabel)
        self.addLayout.addWidget(self.projectListCombo)
        self.addGroup.setLayout(self.addLayout)

        self.mainLayout = QtGui.QVBoxLayout()
        self.mainLayout.addWidget(self.addGroup)
        self.setLayout(self.mainLayout)



def main():
    app = QtGui.QApplication(sys.argv)
    tabdialog = tabDialog()
    tabdialog.show()
    app.exec_()

if __name__ == '__main__':
    main()

I made ​​the following changes:

  1. mainTab and secondTab in tabDialog are instance attributes
  2. mainTab and secondTab get tabDialog as a parent
  3. Added additemToList in tabDialog
  4. In mainTab.__init__(): self.createButton.clicked.connect(parent.additemToList)

Upvotes: 1

Related Questions