0

我是一名 Python 新手/爱好者,希望将 Python 编程融入我的下一个职业。我购买并阅读了 Summerfield 书籍“使用 Python 和 QT 进行快速 GUI 编程”中的第 119 页。我遇到了障碍,想知道您是否可以给我一些指导。我的问题如下:为什么不允许或不需要插入“self”。作为下面每个小部件之前的前缀?

例如,如果我添加前缀“self”。到“title = QtGui.QLabel('Title')”行,我收到以下错误消息: NameError: global name 'title' is not defined

我在 Summerfield 的“Python gui Programming with qt4”一书中读到,“setlayout()”重新定义了小部件,因此 Form 是父级。我认为他表示使用“setlayout()”使得前缀“.self”变得不必要。

但如果你不使用“自我”。作为前缀,你如何指向一个小部件?例如,如果我使用 setlayout 将“Form”设为父级,我的函数“fn_okButton01_clicked(self):”应该能够获取“titleEdit”的文本值,但我无法找出获取文本的正确方法价值。

我尝试使用“print self .titleEdit.getText()”和“print Form .titleEdit.getText()”都不起作用。当我尝试使用后者时,错误消息是: AttributeError: 'Form' object has no attribute '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 回答