2016-03-29 4 views
1

私は最近QTCreatorを使用していますが、私はATMを愛しています。残念ながら、私はPythonでそれを使用したいのですが、私は問題にぶち当たっています。私が持っている最大の問題は、Noneを返すアプリケーションコンテキストの子を見つけることです。私がテストしてみただけではないwhite_backgroundQObjectでfindChild(QObject、 'child')を呼び出すことができません。戻り値なし

main.py

import sys 

from PyQt5.QtCore import QUrl, QSize, QObject 
from PyQt5.QtGui import QGuiApplication 
from PyQt5.QtQuick import QQuickView 


LOGIN_SCREEN_SIZE = QSize(640, 350) 


def main(): 
    application = QGuiApplication(sys.argv) 

    login_window = QQuickView() 
    login_window.setSource(QUrl('loginscreen.qml')) 

    login_window.setMinimumSize(LOGIN_SCREEN_SIZE) 
    login_window.setMaximumSize(LOGIN_SCREEN_SIZE) 

    login_window.show() 

    ## vvvv Returns None ## 
    print(login_window.findChild(QObject, 'white_background')) 

    # login_window.rootObject().open_main_app.connect(app) 

    sys.exit(application.exec_()) 


def app(username, password): 
    print("YAY") 

    main_window = QQuickView() 
    main_window.show() 


if __name__ == '__main__': 
    main() 

loadingscreen.qml

import QtQuick 2.4 
import QtQuick.Controls 1.5 

Item { 
    id: window 
    x: 0 
    height: 350 
    visible: true 
    transformOrigin: Item.Center 
    rotation: 0 

    signal open_main_app(string username, string password) 

    Rectangle { 
     id: white_background 
     x: 0 
     y: 0 
     width: 640 
     height: 350 
     color: "#ffffff" 
     border.width: 0 


     Rectangle { 
      id: green_background 
      x: 0 
      y: 0 
      width: 640 
      height: 138 
      color: "#30945d" 
     } 

     Text { 
      id: login_text 
      x: 0 
      y: 0 
      width: 640 
      height: 124 
      color: "#b3d756" 
      text: qsTr("LOGIN") 
      styleColor: "#f60000" 
      style: Text.Normal 
      font.bold: true 
      verticalAlignment: Text.AlignVCenter 
      horizontalAlignment: Text.AlignHCenter 
      font.pixelSize: 112 
     } 


     TextField { 
      id: username_box 
      x: 149 
      y: 160 
      width: 384 
      height: 30 
      placeholderText: qsTr("Steve") 
     } 


     TextField { 
      id: password_box 
      x: 149 
      y: 215 
      width: 384 
      height: 30 
      echoMode: 2 
      placeholderText: qsTr("qwerty123") 
     } 


     Label { 
      id: label1 
      x: 40 
      y: 166 
      text: qsTr("Username") 
     } 


     Label { 
      id: label2 
      x: 40 
      y: 221 
      text: qsTr("Password") 
     } 


     Button { 
      id: login_button 
      x: 548 
      y: 308 
      text: qsTr("Go") 

      onClicked: 
      { 
       window.open_main_window(username_box.text, password_box.text) 

       //Qt.quit() << Only works when launching from C++ file 
      } 
     } 

    } 

} 

、それらはすべて動作しません。私は問題が何であるか理解できません。補足として、私が持っている信号は送信されません。私は手動で接続しようとしたかったが、findChildが機能しないので、できません。

答えて

1

findChildが要素を探すのはidであるためです。代わりに、qmlファイルでobjectNameを使用する必要があります。

としてあなた white_background長方形を書き換え

:私はPyQtはからTextInput要素の値にアクセスする方法を把握しようとしているときに

Rectangle { 
     id: white_background 
     objectName: "white_background" 
     x: 0 
     y: 0 
     width: 640 
     height: 350 
     color: "#ffffff" 
     border.width: 0 
     ... 
} 
+0

こんにちは、応答に感謝します。私は移動しましたが、私はまだこれを試していたときにobjectNameを試しましたが、それもうまくいきませんでした。私は、私が質問にそれを試してみたことを誓うが、私はしなかったと思う、それはあまりにも長いです。 – 0BobTheJanitor

0

この質問に出くわしました。 ismaelの提案通りにobjectNameを設定しようとしました。だから私はismaelがこれに当てはまると思う。

ここで私はそれがうまくいったのです。 appLabel = QQuickView()commentsTextAreaobjectNameTextInputの要素である

@pyqtSlot(result = str) 
def saveEdits(self): 
    comments = appLabel.findChild(QObject, "commentsTextArea").property("text") 
    print(comments) 
    return "save edits success" 

関連する問題