web-dev-qa-db-ja.com

PyQtのコンボボックスにアイテムを追加する方法

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が変更されたときに実行される関数の一部です。

23
GiannisIordanou

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)
40
ekhumoro

ここにいくつかのシンプルで読みやすいデモ/例があります https://github.com/shuge/Enjoy-Qt-Python-Binding

クローンを作成すると、基本的なQComboBoxの使用方法とそのアイコンアイテムをカスタム化する方法のデモが見つかります。

4
Tony

テキストファイルの名前を使用してcomboBoxに入力する必要がありました

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()

将来の誰かのお役に立てれば幸いです。

.

0
Mujeeb Ishaque