2010-11-11 2 views
1

Я пытаюсь создать простое приложение PyQT4, которое позволит мне отображать текст из двух текстовых полей в одном окне сообщения. Это довольно прямолинейно, поэтому я уверен, что мне не хватает чего-то очень крошечного.AttributeError: объект 'myWindow' не имеет атрибута 'txtFirstName'

Благодарим за помощь.

import sys 
from PyQt4 import QtGui, QtCore 

class myWindow(QtGui.QWidget): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 

     #The setGeometry method is used to position the control. 
     #Order: X, Y position - Width, Height of control. 
     self.resize(500,350) 
     self.center() 
     self.setWindowTitle("Sergio's QT Application.") 
     self.setWindowIcon(QtGui.QIcon('menuScreenFolderShadow.png')) 

     self.setToolTip('<i>Welcome</i> to the <b>first</b> app ever!') 
     QtGui.QToolTip.setFont(QtGui.QFont('Helvetica', 12)) 

     txtFirstName = QtGui.QLineEdit('', self) 
     txtFirstName.setGeometry(35, 35, 150, 20) 

     txtLastName = QtGui.QLineEdit('', self) 
     txtLastName.setGeometry(35, 60, 150, 20) 

     btnSubmit = QtGui.QPushButton('Say hello.', self) 
     btnSubmit.setGeometry(340, 250, 150, 35) 
     self.connect(btnSubmit, QtCore.SIGNAL("clicked()"), self.clicked) 

     btnQuit = QtGui.QPushButton('Exit Application', self) 
     btnQuit.setGeometry(340, 300, 150, 35) 

     self.connect(btnQuit, QtCore.SIGNAL('clicked()'), 
        QtGui.qApp, QtCore.SLOT('quit()')) 

    def clicked(self): 
     QtGui.QMessageBox.about(self, "Just dropped by to say hi!", "Welcome to this tutorial %s %s!" % (
      self.txtFirstName.text(), self.txtLastName.text())) 

    def center(self): 
     screen = QtGui.QDesktopWidget().screenGeometry() 
     size = self.geometry() 
     self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2) 

app = QtGui.QApplication(sys.argv) 
mainForm = myWindow() 
mainForm.show() 
sys.exit(app.exec_()) 

Вот сообщение об ошибке я получаю:

Traceback (most recent call last):
File "C:\Users\Sergio.Tapia\Documents\NetBeansProjects\PyQTTests\src\pyqttests.py", line 36, in clicked self.txtFirstName.text(), self.txtLastName.text())) AttributeError: 'myWindow' object has no attribute 'txtFirstName'

ответ

2

Проблема заключается в __init__, где txtLastName создается. Он не создается как член класса, а скорее как локальная переменная внутри метода __init__. Чтобы сделать это членом класса, вы можете позже обратиться к нему, используйте self.:

self.txtFirstName = QtGui.QLineEdit('', self) 
    self.txtFirstName.setGeometry(35, 35, 150, 20) 

    self.txtLastName = QtGui.QLineEdit('', self) 
    self.txtLastName.setGeometry(35, 60, 150, 20) 
+0

Это исправлено, спасибо! – 2010-11-11 14:59:23

+0

@Serg: добро пожаловать. Я предлагаю вам немного повысить уровень Python - это действительно поможет вам понять и эффективно использовать PyQt –

Смежные вопросы