2017-07-07 1 views
0

私のコードは、self.numberLineとマークされたQlineEditボックスから入力されたユーザによって与えられた一定量のボタンを動的に作成します。各ボタンはファイルダイアログを開き、ファイルを検索するファイルを指定し、それに対応するQlineEditにテキストを挿入します。私が抱えている問題は、どのボタンが押されているのかわからないため、QLineEditの対応する列を埋めることができないということです。ダイナミックボタン - ファイルを開き、テキストを読み込んで対応する列に挿入します

私はそれが多少働いていますが、私は2番目のボタンをクリックしたとき、それはだけではなく、2列目の、第一の列に追加されます

クリアボタンは何もしません

例: ユーザー入力3」の場合'numberLineウィジェットで「OK」をクリックすると、ウィジェットの3列が作成されます。トップウィジェットは、ユーザー用のファイルダイアログを開くボタンになります。その下にある他のウィジェットはQlineEditのエントリです

ユーザが番号を変更すると、適切な量のカラムが作成されますが、検索するファイルを選択すると何も挿入されません。

私は何が欠けているか?

画像

spacer1 = QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 
    spacer2 = QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 

    self.hbutton.addItem(spacer1) 
    self.hbutton.addItem(spacer2) 
    self.hboxlayout = QtWidgets.QHBoxLayout() 
    self.hboxlayout0 = QtWidgets.QHBoxLayout() 
    self.hboxlayout1 = QtWidgets.QHBoxLayout() 
    self.hboxlayout2 = QtWidgets.QHBoxLayout() 
    self.hboxlayout3 = QtWidgets.QHBoxLayout() 
    self.hboxlayout4 = QtWidgets.QHBoxLayout() 
    self.hboxlayout5 = QtWidgets.QHBoxLayout() 

    self.gridLayout_12.addLayout(self.hbutton, 1, 1, 1, 1) 
    self.gridLayout_12.addLayout(self.hboxlayout, 0, 1, 1, 1) 
    self.gridLayout_12.addLayout(self.hboxlayout0, 1, 1, 1, 1) 
    self.gridLayout_12.addLayout(self.hboxlayout1, 2, 1, 1, 1) 
    self.gridLayout_12.addLayout(self.hboxlayout2, 3, 1, 1, 1) 
    self.gridLayout_12.addLayout(self.hboxlayout3, 4, 1, 1, 1) 
    self.gridLayout_12.addLayout(self.hboxlayout4, 6, 1, 1, 1) 
    self.gridLayout_12.addLayout(self.hboxlayout5, 7, 1, 1, 1) 
    self.pushButton_9.clicked.connect(self.addLineEdit) 

    self.numberLine = QtWidgets.QLineEdit() 
    self.numberLine.setMaximumSize(QtCore.QSize(60, 16777215)) 
    self.numberLine.setObjectName("self.numberLine") 
    self.horizontalLayout_7.addWidget(self.numberLine) 
    self.Array = [] 
    self.PDiffEntryList = [] 

def clearLayout(self): 
    # del self.Array[:] 
    while self.hboxlayout0.count(): 
     child = self.hboxlayout.takeAt(0) 
     child1 = self.hboxlayout0.takeAt(0) 
     child2 = self.hboxlayout1.takeAt(0) 
     child3 = self.hboxlayout2.takeAt(0) 
     child4 = self.hboxlayout3.takeAt(0) 
     child5 = self.hboxlayout4.takeAt(0) 
     child6 = self.hboxlayout5.takeAt(0) 
     if child.widget(): 
      child.widget().deleteLater() 
     if child1.widget(): 
      child1.widget().deleteLater() 
     if child2.widget(): 
      child2.widget().deleteLater() 
     if child3.widget(): 
      child3.widget().deleteLater() 
     if child4.widget(): 
      child4.widget().deleteLater() 
     if child5.widget(): 
      child5.widget().deleteLater() 
     if child6.widget(): 
      child6.widget().deleteLater() 

def addLineEdit(self): 
    try: 
     self.clearLayout() 
     self.FileButton = {} 
     for i in range(int(self.numberLine.text())): 
      self.FileButton[i] = QtWidgets.QPushButton(self.centralwidget) 
      self.FileButton[i].setText('File') 
      self.FileButton[i].setMaximumSize(QtCore.QSize(50, 16777215)) 
      self.hboxlayout.addWidget(self.FileButton[i]) 
      self.FileButton[i].clicked.connect(lambda i=i: self.openfile(i)) 

      self.le = QtWidgets.QLineEdit() 
      self.le.setMaximumSize(QtCore.QSize(50, 16777215)) 
      self.hboxlayout0.addWidget(self.le) 

      self.le1 = QtWidgets.QLineEdit() 
      self.le1.setMaximumSize(QtCore.QSize(50, 16777215)) 
      self.hboxlayout1.addWidget(self.le1) 

      self.le2 = QtWidgets.QLineEdit() 
      self.le2.setMaximumSize(QtCore.QSize(50, 16777215)) 
      self.hboxlayout2.addWidget(self.le2) 

      self.le3 = QtWidgets.QLineEdit() 
      self.le3.setMaximumSize(QtCore.QSize(50, 16777215)) 
      self.hboxlayout3.addWidget(self.le3) 

      self.le4 = QtWidgets.QLineEdit() 
      self.le4.setMaximumSize(QtCore.QSize(50, 16777215)) 
      self.hboxlayout4.addWidget(self.le4) 

      self.le5 = QtWidgets.QLineEdit() 
      self.le5.setMaximumSize(QtCore.QSize(50, 16777215)) 
      self.hboxlayout5.addWidget(self.le5) 
      self.PDiffEntryList.append(self.le) 
    except: 
     print('') 
def searchfile(self,dir): 
    try: 
     with open(dir) as f: 
      content = f.readlines() 

      # # Main Info - Ps, Pd, Ts 
      MainList = content[44].split() 
      RPM = str(round(float(MainList[0]), 2)) 
      Ps = str(round(float(MainList[1]), 2)) 
      Ts = str(round(float(MainList[2]), 2)) 
      Pd = str(round(float(MainList[3]), 2)) 
      Ratio = str(round(Pd/Ps, 2)) 
      DiffP = str(round(Pd - Ps, 2)) 
      self.input(i) 
    except: 
     print('Only out files') 
def input(self,i): 
    if i == 0: 
     print('0') 
    elif i == 1: 
     print('1') 
def openfile(self,i): 
    filename = QtWidgets.QFileDialog.getOpenFileName(self, 'Choose file') 
    dir = filename[0] 
    directory = os.path.split(dir)[0] 
    self.searchfile(dir,i) 

答えて

1

は、あなたがやっている奇妙なものがたくさんあります。たとえば、なぜグローバルな "i"を宣言しているのか、どの変数名を選択しているのかは分かりません。しかし、あなたの主要な問題に対処するために、繰り返し同じ名前のオブジェクトを繰り返し作成するforループを繰り返します。

try: 
     self.clearLayout() 
     self.file_buttons = {} 
     for i in range(int(self.numberLine.text())): 
      self.file_buttons[i] = QtWidgets.QPushButton(self.centralwidget) 

今あなたがボタンにしたいすべての変更のためにself.file_buttons [i]を参照することができますが、それは実際に個別のオブジェクトとしてたびに格納されています。作成したすべての行編集変数にも同じことが適用されます。

一般に、同じオブジェクトを何度も作成して別の名前(object1、object2など)を書き出すように見えます。これは、配列や辞書を使用してそれらのすべてを反復処理して作成する良い機会です。何が起こっているのかをより簡単に追跡できるようになります。

+0

グローバルはちょうど私が追加したものの、忘れてしまった、同じオブジェクトが配列で作成されているのと同じように、QLineEditsを参照していますか?ユーザーが3を数字にして2番目のボタンにアクセスしたい場合は、if self.file_buttons [2] .clicked:2番目のボタンを取得するには? –

+0

私はあなたが提供したコードと同じことをしています。 if self.FileButton [1]: print( '1') elif self.FileButton [2]: print( '2') 最初のボタンをクリックすると、 2番目のボタンは '1'を出力します –

+0

新しいコードで質問を更新したり、新しい質問を発行できますか?何が起こっているのか正確に知ることは難しい – aoh

関連する問題