2016-09-27 2 views
0

J'ai vraiment tout essayé pour résoudre mon problème, mais cela ne fonctionne pas. Voici mon code simple pour mettre Comboboxes dans chaque rangée de la table. Cela fonctionne réellement pour setItem(), que j'utilise pour mettre des chaînes dans chaque ligne. Mais cela ne fonctionne pas avec setCellWidget(), que je dois utiliser pour placer la Combobox dans les lignes. C'est comme si setCellWdiget() supprime la combobox après l'avoir placée dans la rangée car elle n'apparaît finalement que dans la toute dernière rangée, ce dont je ne comprends pas pourquoi. Ce serait génial si quelqu'un d'entre vous pouvait m'aider. Merci d'avance!PyQt5 QComboBox dans QTableWidget

Voici le code:

import sys 
from PyQt5 import QtWidgets, QtCore 

class Window(QtWidgets.QMainWindow): 

    def __init__(self): 
     super(Window, self).__init__() 
     self.setGeometry(50,50,500,500) 
     self.setWindowTitle('PyQt Tuts') 
     self.table() 


    def table(self): 

     comboBox = QtWidgets.QComboBox() 

     self.tableWidget = QtWidgets.QTableWidget() 
     self.tableWidget.setGeometry(QtCore.QRect(220, 100, 411, 392)) 
     self.tableWidget.setColumnCount(2) 
     self.tableWidget.setRowCount(5) 
     self.tableWidget.show() 

     attr = ['one', 'two', 'three', 'four', 'five'] 
     i = 0 
     for j in attr: 
      self.tableWidget.setItem(i, 0, QtWidgets.QTableWidgetItem(j)) 
      self.tableWidget.setCellWidget(i, 1, comboBox) 
      i += 1 


def run(): 
    app = QtWidgets.QApplication(sys.argv)  
    w = Window() 
    sys.exit(app.exec_())  

run() 

Répondre

1

Vous créez une seule zone de liste déroulante, donc quand vous le mettez dans une cellule, il est retiré de la cellule prevoius. Vous devez créer une zone de liste déroulante pour chaque cellule (dans la boucle for).

Exemple:

attr = ['one', 'two', 'three', 'four', 'five'] 
i = 0 
for j in attr: 
    self.tableWidget.setItem(i, 0, QtWidgets.QTableWidgetItem(j)) 
    comboBox = QtWidgets.QComboBox() 
    self.tableWidget.setCellWidget(i, 1, comboBox) 
    i += 1 
+0

Avez-vous un exemple de ce que vous voulez dire? – saitam

+0

Ajout d'un exemple – Fabio

+0

+1 Selon le doc: 'Définit le widget donné à afficher dans la cellule dans la ligne et la colonne données, en passant la propriété du widget à la table. – Frodon