2016-02-28 82 views
1

我有一個顯示在Qcombobox中的數據列表(使用'addItems') 現在 - 如果列表通過按鈕從文件加載數據而改變 - 我在combobx中看不到新數據。 新數據在那裏(我可以在加載後打印) 我錯過了什麼?下面 是簡化的GUI如何刷新Qcombobox [python]中的項目?

from PyQt4 import QtCore, QtGui 
from PyQt4.QtGui import QFileDialog 
import pandas as pd 

try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    def _fromUtf8(s): 
     return s 

try: 
    _encoding = QtGui.QApplication.UnicodeUTF8 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig, _encoding) 
except AttributeError: 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig) 

class Ui_MainWindow(object): 
    def __init__(self): 
     self.comboData=['None'] 

    def setupUi(self, MainWindow): 
     MainWindow.setObjectName(_fromUtf8("MainWindow")) 
     MainWindow.resize(456, 172) 
     self.centralwidget = QtGui.QWidget(MainWindow) 
     self.centralwidget.setObjectName(_fromUtf8("centralwidget")) 

     self.comboBox = QtGui.QComboBox(self.centralwidget) 
     self.comboBox.setGeometry(QtCore.QRect(120, 60, 69, 22)) 
     self.comboBox.setObjectName(_fromUtf8("comboBox")) 
     self.comboBox.setEditable(True) 
     self.comboBox.addItems(self.comboData) 

     self.pushButton = QtGui.QPushButton(self.centralwidget) 
     self.pushButton.setGeometry(QtCore.QRect(260, 60, 75, 23)) 
     self.pushButton.setObjectName(_fromUtf8("pushButton")) 
     self.pushButton.clicked.connect(self.load) 

     MainWindow.setCentralWidget(self.centralwidget) 
     self.menubar = QtGui.QMenuBar(MainWindow) 
     self.menubar.setGeometry(QtCore.QRect(0, 0, 456, 21)) 
     self.menubar.setObjectName(_fromUtf8("menubar")) 
     MainWindow.setMenuBar(self.menubar) 
     self.statusbar = QtGui.QStatusBar(MainWindow) 
     self.statusbar.setObjectName(_fromUtf8("statusbar")) 
     MainWindow.setStatusBar(self.statusbar) 

     self.retranslateUi(MainWindow) 
     QtCore.QMetaObject.connectSlotsByName(MainWindow) 

    def retranslateUi(self, MainWindow): 
     MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) 
     self.pushButton.setText(_translate("MainWindow", "Load", None)) 

    def load(self): 
     fileName=QFileDialog.getOpenFileName(MainWindow,'Load File') 
     data_pd=pd.read_csv(fileName,index_col=0,na_filter=False) 
     self.comboData=list(data_pd.var1) 
     print(self.comboData) 



if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    MainWindow = QtGui.QMainWindow() 
    ui = Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.show() 
    sys.exit(app.exec_()) 

回答

3

你只將數據加載到self.comboData但不要把它們加載到self.comboBox代碼。 在的

def load(self):

末端添加下列行:

self.comboBox.clear()  # delete all items from comboBox 
self.comboBox.addItems(self.comboData) # add the actual content of self.comboData 

QComboBox所用的模型發射每當在一個項目中的數據被改變dataChanged()信號,該組合框被自動重新繪製並且沒有必要通過更新組合框

self.comboBox.update()