0

階層的な2つのコンボボックスがあります。最初のコンボボックスには、customerNamesのリストが表示されます。つまり、MySQLデータベースとは異なる会社です。各顧客は異なる都市に支店を持っています。

次に、combo-box1オプションリストから顧客名({Aldi、Meyer、Carrefour、WalMart}など)を選択すると、その特定の顧客の都市/支店のリストが自動的にcombo-box2に表示されます。そのようなもの、例えば:

combo1: chosen_customer [Aldi] --> cities:{NY, Boston, Berlin, Tokyo, London} then..
combo2: options {NY, Boston, Berlin, Tokyo, London}

問題は、最終的に支店の数が少なくなる別の顧客を再度選択したときに発生します。

combo1: chosen_customer [Meyer] --> {LA, San Francisco}, then.. we got
combo2: options {LA, San Francisco, Berlin, Tokyo, London}

intead of combo2: options {LA, San Francisco}

これは、combo2を実行する関数です。この関数は、combo1のリストからcustomerNameが選択されるたびに呼び出されます。

def loadComboCity(self,customerName):
    """query results cityList into self.mydb.matrix"""
    queryName="citylist_thisCustomer"
    self.mysqlAPI(queryName,customerName)

    id=0
    for row in self.mydb.matrix:
        cityname=self.mydb.matrix[id][0]
        self.addcomboCity(id,cityname) 
        id=id+1
    del self.mydb.matrix[:]

そして、その顧客に属するリスト都市の各名前を追加する関数:

def addcomboCity(self,id,cityname):
    self.comboCity.addItem(QtCore.QString())
    self.comboCity.setItemText(id, QtGui.QApplication.translate("MainWindow", cityname, None, QtGui.QApplication.UnicodeUTF8))

delを使用してリストの以前のコンテンツをクリーンアップしようとしましたが、それでも同じ動作が得られます。

これはQtまたはPython関連の問題ですか?それとも、ここで欠けている部分がありますか?

すべてのコメントと提案は高く評価されています。

4

1 に答える 1

1

'forループ'の前にQComboBox.clear()呼び出しがないようです。次のコードを試してください(id = 0の直前の新しい行に注意してください)

def loadComboCity(self,customerName):
    """query results cityList into self.mydb.matrix"""
    queryName="citylist_thisCustomer"
    self.mysqlAPI(queryName,customerName)

    # Clear the previous items in the combobox (if any)
    self.comboCity.clear()

    id=0
    for row in self.mydb.matrix:
        cityname=self.mydb.matrix[id][0]
        self.addcomboCity(id,cityname) 
        id=id+1
    del self.mydb.matrix[:]
于 2010-01-02T18:31:51.570 に答える