2017-03-05 9 views
0

LineEditウィジェットを繰り返して文字列を作成するコードがあります。私が持っている問題は、文字列の解析を無作為に繰り返すように見えるということです。ライン編集ウィジェットを順番に繰り返します

for widget in qApp.allWidgets(): 
    if isinstance(widget, QLineEdit): 
     insertQuery += widget.displayText() 
+0

正しい順序をどのように定義すると思いますか?ポジショニングやタブオーダーなどを使用していますか? – mFoxRU

+0

私はタブの順序について考えなかった。基本的に私は注文を管理することができます。または、少なくとも期待する順序を知っている。 –

答えて

0

私はラインエディットが

LineEdit.setObjectName(str(i)) 

その後、私はラインエディットオブジェクトの値を設定するためにFocusOutを使用するオブジェクトを作成するためにループ内でのobjectNameを設定するソリューションに@mFoxRU

ファーストへの感謝を持って[OK]を辞書

LEDict = {'1': '', '2': '', '3': '', '4': '', '5': '', '6': '', '7': '', '8': '', '9': '', '10': '', '11': '', '12': ''} 
if event.type() == QEvent.FocusOut: 
      LEDict[widget.objectName()] = widget.displayText() 
      return False 

は最後に、私は、SQL文

を構築するために使用できる範囲を使用して辞書を反復処理します
for i in range(12): 
      x = i + 1 
      print(LEDict[str(x)]) 

実際には、forループを削除して、ディクショナリ要素を直接呼び出してSQLコードを作成する1つの文を使用しました。

testInsert = "Insert INTO address VALUES(" + LEDict["1"] + ", " + LEDict["2"] + ")" 
1

allWidgets()は、特定の順序を保証しません。あなたの目標を達成するにはいくつかの方法があります。

  • 手動でウィジェットのリストを作成し、それを反復することができます。
  • タブ順序を指定して、nextInFocusChain()を使用して、次の項目を順番に移動することができます。
  • 注文番号を含むプロパティを追加し、注文番号をキーにしてテキスト値をdictに収集し、その後に値を結合します。以前の変種と同様に
  • 、あなたが選択されますどちらの道ウィジェットのobjectName

に注文番号を追加するようQLineEditためのいくつかの命名規則を使用することはあなた次第ですし、UIを作成する方法によって異なります。

+0

本質的には、保存ボタンを使用して行編集の値をデータベースにプッシュするフォームを作成しようとしています。最初のフォーカスを保証することは非常に難しいですが、私は初期のフォーカスを強制することができますが、フォーカスを移動し続ける無限ループを作成することを心配する必要があります。 –

+0

LineEditsは、同じ変数を再利用するループで作成されています。 –

+0

Line Editオブジェクトに対してobjectNameを設定できるものは何も表示されません。 –

関連する問題