0

私はPythonの初心者/趣味で、Pythonプログラミングを次のキャリアにしたいと思っています。サマーフィールドの本「PythonとQTを使用したRapidGuiプログラミング」の119ページを購入して読みました。私は障害にぶつかり、私にいくつかのガイダンスを与えることができるかどうか疑問に思いました。私の質問は次のとおりです。「自己」を挿入することが許可されていない、または必要でないのはなぜですか。以下の各ウィジェットの前のプレフィックスとして?

たとえば、接頭辞「self」を追加するとします。「title=QtGui.QLabel('Title')」の行に、次のエラーメッセージが表示されます。NameError:グローバル名'title'が定義されていません

「PythonguiProgrammingwith qt4」に関するサマーフィールドの本で、「setlayout()」がウィジェットの親を変更し、Formが親になることを読みました。彼は、「setlayout()」を使用するとプレフィックス「.self」が不要になることを示していたと思います。

しかし、あなたが「自己」を使わなければ。プレフィックスとして、ウィジェットをどのように指しますか?たとえば、setlayoutを使用して「Form」を親にした場合、関数「fn_okButton01_clicked(self):」は「titleEdit」のテキスト値を取得できるはずですが、テキストを取得する正しい方法がわかりません。価値。

「 printself.titleEdit.getText()」と「printForm .titleEdit.getText()」使ってみましたが、どちらも機能しませんでした。後者を使用しようとすると、エラーメッセージは次のようになりました。AttributeError:'Form'オブジェクトに属性がありません'titleEdit'ガイダンスをいただければ幸いです。

ありがとう、

                Marc

これが私が扱ってきたコードです:

# -*- coding: utf-8 -*-

import sys
from PyQt4 import QtGui
from PyQt4.QtCore import (Qt, SIGNAL)
from PyQt4.QtGui import (QApplication, QDialog, QHBoxLayout, QLabel,
        QPushButton)

class Form(QDialog):

    def __init__(self, parent=None):
        super(Form, self).__init__(parent)

        self.initUI()

    def initUI(self):

        okButton01 = QtGui.QPushButton("OK")
        cancelButton01 = QtGui.QPushButton("Cancel")
        okButton01.clicked.connect(self.fn_okButton01_clicked)

        title = QtGui.QLabel('Title')
        author = QtGui.QLabel('Author')
        review = QtGui.QLabel('Review')

        titleEdit = QtGui.QLineEdit()
        authorEdit = QtGui.QLineEdit()
        reviewEdit = QtGui.QTextEdit()

        hbox01 = QtGui.QHBoxLayout()
        hbox01.addStretch(1)
        hbox01.addWidget(title)
        hbox01.addWidget(titleEdit)

        hbox02 = QtGui.QHBoxLayout()
        hbox02.addStretch(1)
        hbox02.addWidget(author)
        hbox02.addWidget(authorEdit)

        hbox03 = QtGui.QHBoxLayout()
        hbox03.addStretch(1)
        hbox03.addWidget(review)
        hbox03.addWidget(reviewEdit)

        hbox00 = QtGui.QHBoxLayout()
        hbox00.addStretch(1)
        hbox00.addWidget(okButton01)
        hbox00.addWidget(cancelButton01)

        vbox0 = QtGui.QVBoxLayout()
        vbox0.addStretch(1)
        vbox0.addLayout(hbox01)
        vbox0.addStretch(1)
        vbox0.addLayout(hbox02)
        vbox0.addStretch(1)
        vbox0.addLayout(hbox03)
        vbox0.addStretch(1)
        vbox0.addLayout(hbox00)

        self.setLayout(vbox0)    

        self.setGeometry(300, 300, 300, 150)
        self.setWindowTitle('Data Input Fields')    
        self.show()

    def fn_okButton01_clicked(self):
        print self.titleEdit.getText()


def main():

    app = QApplication(sys.argv)
    form = Form()
    form.show()
    app.exec_()


if __name__ == '__main__':
    main()
4

1 に答える 1

1

作成したオブジェクトはローカル変数に割り当てられます。後でそれらにアクセスするには、それらをクラスのインスタンスに割り当てる必要があります。たとえば、

self.titleEdit = titleEdit

initUI関数の最後に。別の方法として、信号をトリガーしたオブジェクトを次のコマンドで取得することもできます。

self.sender()
于 2013-02-15T20:49:57.507 に答える