QComboBox
にアイテムを追加するのに手助けが必要です。だから私は2つのコンボボックスを持っていて、選択されたアイテムに応じて1つはもう1つを埋めます。
私の質問は、新しいアイテムにadditem
を使用すると機能しますが、コンボボックスに別のオプションを選択すると、新しいアイテムが追加されますが、以前のアイテムはなくなり、新しいアイテムの下に空白のアイテムがありますもの。
最初のコンボボックスから新しいオプションを選択するたびに、2番目のコンボボックスの内容をクリアすると思った。そのため、2番目にclear()
を使用しましたが、機能しませんでした。
それが私がそれを考えた方法です:
self.comboBox_2.clear()
for index,i in enumerate(list1):
self.comboBox_2.addItem(_fromUtf8(""))
self.comboBox_2.setItemText(index+2, QApplication.translate("Dialog", i, None, QApplication.UnicodeUTF8))
上記は、最初のcombobox
が変更されたときに実行される関数の一部です。
list1
が文字列のリストであると仮定すると、 addItems メソッドを使用して、一度にすべてを一度に追加できます。
self.comboBox_2.clear()
self.comboBox_2.addItems(list1)
あなたの例ではおそらくQApplication.translate
を間違った方法で使用していることに注意してください。 list1
の文字列を別の言語に翻訳できるようにしたい場合は、リストをcreateするときにそれを行い、string literals。
例えば:
list1 = [
self.tr('First Item'),
self.tr('Second Item'),
self.tr('Third Item'),
]
また、_fromUtf8
関数は、コードでASCII以外の文字を含む文字列リテラルを使用している場合にのみ役立つことに注意してください。それ以外の場合は、基本的に何もしません。
[〜#〜]編集[〜#〜]
リストにピクスマップとテキストのタプルが含まれている場合は、次のようなものを使用できます。
self.comboBox_2.clear()
for pixmap, text in list1:
self.comboBox_2.addItem(QIcon(pixmap), text)
ここにいくつかのシンプルで読みやすいデモ/例があります https://github.com/shuge/Enjoy-Qt-Python-Binding 、
クローンを作成すると、基本的なQComboBox
の使用方法とそのアイコンアイテムをカスタム化する方法のデモが見つかります。
names = self.classes_names() self.comboBox.addItems(names) def classes_names(self): coconames = CURRENT_DIR + os.sep + 'yolo-coco' + os.sep + 'coco.names' with open(coconames) as reader: return reader.readlines()
将来の誰かのお役に立てれば幸いです。
.