我是一名 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()