Python PyQT4-不明な数のQComboBoxウィジェットをQGridLayoutに追加する
質問
キューから人の名前のリストを取得し、各人について、addWidget()関数を使用して、名前付きのチェックボックスをQGridLayoutに配置します。項目をQListViewに正常に配置できますが、新しい行を作成するのではなく、互いの上に上書きします。誰が私がこれを修正できるかについて何か考えがありますか?
self.chk_People = QtGui.QListView()
items = self.jobQueue.getPeopleOffQueue()
for item in items:
QtGui.QCheckBox('%s' % item, self.chk_People)
self.jobQueue.getPeopleOffQueue()は、それが役立つ場合、['Bob'、 'Sally'、 'Jimmy']のようなものを返します。
解決
この行:
QtGui.QCheckBox('%s' % item, self.chk_People)
リストビューにチェックボックスを追加するのではなく、リストビューを親として作成するだけで、大きな違いがあります。
リストビューを使用する最も簡単な方法は、 QListWidget
コンビニエンスクラスです。そのためには、チェックボックスを QListWidgetItem
のインスタンスとして作成し、リストウィジェットで addItem
を使用して実際に追加します。
それらをグリッドレイアウトに追加する際に問題がありましたか?通常、チェックボックスの数が少ない場合、グリッドレイアウトの方が優れている可能性があります。これはすべて、アプリの外観に依存します。ただし、このようなオブジェクトが多数ある場合は、リストウィジェット/ビューが最適です。
他のヒント
PyQtで解決策を説明することはできませんが、従う必要がある構造は次のとおりです。 QListViewは必要なことを実行できます。別個のチェックボックスを作成する必要はありません。 QAbstractItemModel
または QStandardItemModel
(コーディングの量に応じて)< code> flags()メソッドを使用して、適切なフラグを返す含む Qt :: ItemIsUserCheckable
の columncount()
メソッドで、チェックボックスを含めるための追加の列と data
チェックボックスを表示する列のメソッドは、 Qt :: CheckStateRoleのチェック状態
。 Qt :: Checked
、 Qt :: Unchecked
を返します
これは、 QListWidget
を使用しても実現できます。データを追加するために QListWidgetItem
を使用できます。モデルを作成する必要があります。 QListWidgetItem
では、モデルをサブクラス化せずに setFlags()
および setData(QVariant(bool、Qt :: CheckStateRole)
を使用できます