2017-07-18 2 views
1

私はPythonにはかなり新しく、PyQtでは非常に新しいです。私のGUIにPyQt5でDataTableを埋め込む

ファイルブラウズボタンをクリックすると、pyqtプログラムにQTableWidgetを埋め込もうとしています。私の目標は、複数のテーブルを作るためにクラスを持つことですが、クラスを静的にしたので、それを呼び出すときに定義済みのテーブルが生成されるようにしました。今はテーブルを埋め込む方法を見てみようとしています。

私は、2つのメソッド "InitializeUI"と "import"を、私のクラスMainWindowで定義します。 InitializeUIは私のウィジェットのほとんどの作成とレイアウトを担当しており、InitializeUIで作成したレイアウトを使ってテーブルを作成して埋め込むことができます。これをどうやってやりますか?

さらに、実行していたコードでは、「プロセスは終了コード1で終了しました」というエラーが表示され、デバッグは困難でした。ここに私の現在のコードです。

インポート方法のための方法

self.BrowseBtn.clicked.connect(self.import1) 

コードをインポートするには、私の参照ボタンを結ぶ

コード。メインウィンドウには、左、右上、右下の3つのレイアウトがあります。私のテーブルは私の窓の右下に入るよ​​うにしたい。 Intutivelyテーブル

class CreateTable(QTableWidget): 
     def __init__(self): 
     self.tableWidget = QTableWidget() 
     self.tableWidget.setRowCount(4) 
     self.tableWidget.setColumnCount(2) 
     self.tableWidget.setItem(0,0, QTableWidgetItem("Cell (1,1)")) 
     self.tableWidget.setItem(0,1, QTableWidgetItem("Cell (1,2)")) 
     self.tableWidget.setItem(1,0, QTableWidgetItem("Cell (2,1)")) 
     self.tableWidget.setItem(1,1, QTableWidgetItem("Cell (2,2)")) 
     self.tableWidget.setItem(2,0, QTableWidgetItem("Cell (3,1)")) 
     self.tableWidget.setItem(2,1, QTableWidgetItem("Cell (3,2)")) 
     self.tableWidget.setItem(3,0, QTableWidgetItem("Cell (4,1)")) 
     self.tableWidget.setItem(3,1, QTableWidgetItem("Cell (4,2)")) 

を作成するための

def import1(self): 
     self.Table = CreateTable() 
     vboxRightBottom.addWidget(self.Table) 

クラスを私は別の方法での一つの方法から、レイアウトを呼び出すことはできませんことを知っているが、私は他の私の表を埋め込むだろうかわからないんだけど方法。

申し訳ありませんコードが正しくインデントされていない場合は、私のコードをコピー/貼り付けするときにスタックが厄介です。

あなたがさらに参照が必要な場合は、ここで私の完全なコードへのリンク

https://github.com/Silvuurleaf/Data-Analysis-and-Visualization-GUI/blob/master/Plotter3.1.py

答えて

1

vboxRightBottom__init__にその宣言で(最初のあなたはそれを呼び出していたるところにこの問題を解決する必要があり、クラスでは保持しないことになりそうだですそして、すべてのメソッドの内部):

self.vboxRightBottom = QVBoxLayout() 

def import1(self): 
    self.Table = CreateTable() 
    self.vboxRightBottom.addWidget(self.Table) 

は、その後、あなたがクラスを処理する方法が便利ではない、あなたではなく、オブジェクトを作成する必要があり、直接以下のようにQTableWidget:だから

class CreateTable(QTableWidget): 
     def __init__(self): 
     super(CreateTable, self).__init__() 
     self.setRowCount(4) 
     self.setColumnCount(2) 
     self.setItem(0,0, QTableWidgetItem("Cell (1,1)")) 
     self.setItem(0,1, QTableWidgetItem("Cell (1,2)")) 
     self.setItem(1,0, QTableWidgetItem("Cell (2,1)")) 
     self.setItem(1,1, QTableWidgetItem("Cell (2,2)")) 
     self.setItem(2,0, QTableWidgetItem("Cell (3,1)")) 
     self.setItem(2,1, QTableWidgetItem("Cell (3,2)")) 
     self.setItem(3,0, QTableWidgetItem("Cell (4,1)")) 
     self.setItem(3,1, QTableWidgetItem("Cell (4,2)")) 

ときに、インスタンスクラスを、それはウィジェットを返し、そうでない場合はあなたが与える必要があります私は完全に私が呼び出すことで変数を参照できることを忘れてしまった「自己」をアドバイスself.Table.tableWidgetうわーaddWidget方法

self.table = CreateTable() 
self.vboxRightBottom.addWidget(self.table) 
+0

のおかげ。私はこれを行うと、右下に複数のフレームを入力することができますが、それらは空白です。テーブルとテーブルのデータは表示されません。これを引き起こしている可能性があることは分かりますか? –

+0

'CreateTable'クラスを変更しましたか? – PRMoureu

+0

Nevermind私はあなたが私のクラスCreateTable(): –

関連する問題