LineEditウィジェットを繰り返して文字列を作成するコードがあります。私が持っている問題は、文字列の解析を無作為に繰り返すように見えるということです。ライン編集ウィジェットを順番に繰り返します
for widget in qApp.allWidgets():
if isinstance(widget, QLineEdit):
insertQuery += widget.displayText()
LineEditウィジェットを繰り返して文字列を作成するコードがあります。私が持っている問題は、文字列の解析を無作為に繰り返すように見えるということです。ライン編集ウィジェットを順番に繰り返します
for widget in qApp.allWidgets():
if isinstance(widget, QLineEdit):
insertQuery += widget.displayText()
私はラインエディットが
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"] + ")"
allWidgets()
は、特定の順序を保証しません。あなたの目標を達成するにはいくつかの方法があります。
nextInFocusChain()
を使用して、次の項目を順番に移動することができます。dict
に収集し、その後に値を結合します。以前の変種と同様にobjectName
に注文番号を追加するようQLineEdit
ためのいくつかの命名規則を使用することはあなた次第ですし、UIを作成する方法によって異なります。
本質的には、保存ボタンを使用して行編集の値をデータベースにプッシュするフォームを作成しようとしています。最初のフォーカスを保証することは非常に難しいですが、私は初期のフォーカスを強制することができますが、フォーカスを移動し続ける無限ループを作成することを心配する必要があります。 –
LineEditsは、同じ変数を再利用するループで作成されています。 –
Line Editオブジェクトに対してobjectNameを設定できるものは何も表示されません。 –
正しい順序をどのように定義すると思いますか?ポジショニングやタブオーダーなどを使用していますか? – mFoxRU
私はタブの順序について考えなかった。基本的に私は注文を管理することができます。または、少なくとも期待する順序を知っている。 –