2016-09-27 39 views
0

私は本当に問題を解決するためにすべてを試みましたが、うまくいきません。 ここに、テーブルの各行にComboboxesを入れる簡単なコードがあります。これはsetItem()で実際に動作します。これは文字列を各行に入れるために使用します。しかし、setCellWidget()では動作しません。これは、Comboboxを行に配置するために使用する必要があります。それはsetCellWdiget()がコンボボックスを行に入れた後にコンボボックスを削除するかのようです。なぜなら、最後の行にしか表示されないからです。理由は分かりません。 あなたの誰かが私を助けることができれば素晴らしいと思います。事前に多くの感謝!あなたは、単一のコンボボックスを作成QTableWidgetのPyQt5 QComboBox

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

答えて

1

あなたがセルにそれを置くときに、それがprevoiusセルから削除されます。ここでは

はコードです。 各セル(forループ内)のコンボボックスを作成する必要があります。

例:

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

あなたは、あなたが何を意味するかの例を持っていますか? – saitam

+0

例を追加 – Fabio

+0

+1 doc: '与えられた行と列のセルに表示されるウィジェットを設定し、ウィジェットの所有権をテーブルに渡します.' – Frodon