Pergunta

Eu quero recuperar uma lista de nomes de pessoas de uma fila e, para cada pessoa, coloque uma caixa de seleção com o seu nome a um QGridLayout usando a função addWidget (). Eu com êxito pode colocar os itens em um QListView, mas eles simplesmente escrever por cima uns dos outros em vez de criar uma nova linha. Alguém tem alguma opinião sobre como eu poderia corrigir isso?

self.chk_People = QtGui.QListView()
items = self.jobQueue.getPeopleOffQueue()

for item in items:
    QtGui.QCheckBox('%s' % item, self.chk_People)

self.jobQueue.getPeopleOffQueue () deve retornar algo como [ 'Bob', 'Sally', 'Jimmy'] se isso ajuda.

Foi útil?

Solução

Esta linha:

QtGui.QCheckBox('%s' % item, self.chk_People)

não adicionar a caixa de seleção para a exibição de lista, ele só cria-lo com a exibição de lista como o pai, e há uma grande diferença.

A maneira mais simples de usar uma exibição de lista é a classe QListWidget conveniência. Para isso, criar suas caixas como instâncias de QListWidgetItem e depois usar addItem sobre o widget de lista para realmente adicioná-los a ele.

Será que você tem um problema de adicioná-los a um layout de grade? Geralmente, se a quantidade de caixas que você tem é um layout de grade pequena pode ser melhor - tudo depende de como você quer que sua aplicação para olhar. Mas se você pode ter um monte de tais objetos, em seguida, um widget de lista / vista é o melhor.

Outras dicas

Eu não posso dizer-lhe a solução em PyQt mas a estrutura que você precisa seguir é o seguinte. O QListView pode fazer o que você precisa, você não precisa criar caixas separadas. Criar uma subclasse de QAbstractItemModel ou QStandardItemModel (dependendo da quantidade de codificação que você vai querer fazer) substituir o método flags() para devolver os sinalizadores apropriados incluindo Qt::ItemIsUserCheckable , no método columncount() adicionar uma coluna extra para incluir a caixa e no método data para a coluna onde você deseja que o seu caixa para aparecer devolver o Qt::Checked estado selecionado, Qt::Unchecked para o Qt::CheckStateRole.

Isto pode também ser realizada utilizando o QListWidget onde você pode usar QListWidgetItem para adicionar dados e não precisam para criar um modelo. Em QListWidgetItem você pode usar setFlags() e setData(QVariant(bool, Qt::CheckStateRole) sem ter a subclasse um modelo

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top