2015-12-27 2 views
0

У меня есть приложение с графическим интерфейсомAttributeError: «class_c» объект не имеет атрибута «lineEdit»

  1. Я положил текст в текстовом поле, а затем нажмите на кнопочные,
  2. Функция callprinttext() в moduel_b.py называться ,
  3. Функция callprinttext() является метод printtext() вызова в moduel_c.py

, но у меня есть ошибка:

AttributeError: 'class_c' object has no attribute 'lineEdit' 

может кто-нибудь помочь мне с class_c? Вот код для этого:

module_c.py

class class_c (object): 
    def __init__(self, parent=None): 
     self.parent=parent 

### I want a fix for error here 
    def printtext (self): 
      t=unicode(self.lineEdit.text()) 
      print t 

module_b.py

import sys 
from GUI import Ui_MainWindow 
from PyQt4 import QtCore, QtGui 
class calss_b (object): 
    def __init__(self, parent=None): 
     pass 

    def callprinttext (self): 
     from module_c import class_c 
     instance_c=class_c() 
     instance_c.printtext() 

main.py

# -*- coding: utf-8 -*- 
from PyQt4 import QtCore, QtGui 
import sys 
from GUI import Ui_MainWindow 
class MainWindow(QtGui.QMainWindow,Ui_MainWindow): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 
     from module_b import calss_b 
     global instance_b 
     instance_b=calss_b(self) 
     QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"), instance_b.callprinttext) 


if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    global myapp 
    myapp = MainWindow() 
    myapp.show() 
    sys.exit(app.exec_()) 

GUI

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


    from PyQt4 import QtCore, QtGui 
    try: 
     _fromUtf8 = QtCore.QString.fromUtf8 
    except AttributeError: 
     def _fromUtf8(s): 
      return s 
    try: 
     _encoding = QtGui.QApplication.UnicodeUTF8 
     def _translate(context, text, disambig): 
      return QtGui.QApplication.translate(context, text, disambig, _encoding) 
    except AttributeError: 
     def _translate(context, text, disambig): 
      return QtGui.QApplication.translate(context, text, disambig) 
    class Ui_MainWindow(object): 
     def setupUi(self, MainWindow): 
      super(Ui_MainWindow, self).__init__() 
      MainWindow.setObjectName(_fromUtf8("MainWindow")) 
      MainWindow.resize(800, 600) 
      self.centralwidget = QtGui.QWidget(MainWindow) 
      self.centralwidget.setObjectName(_fromUtf8("centralwidget")) 
      self.pushButton = QtGui.QPushButton(self.centralwidget) 
      self.pushButton.setGeometry(QtCore.QRect(340, 110, 75, 23)) 
      self.pushButton.setObjectName(_fromUtf8("pushButton")) 
      self.lineEdit = QtGui.QLineEdit(self.centralwidget) 
      self.lineEdit.setGeometry(QtCore.QRect(390, 240, 151, 20)) 
      self.lineEdit.setObjectName(_fromUtf8("lineEdit")) 
      MainWindow.setCentralWidget(self.centralwidget) 
      self.menubar = QtGui.QMenuBar(MainWindow) 
      self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21)) 
      self.menubar.setObjectName(_fromUtf8("menubar")) 
      MainWindow.setMenuBar(self.menubar) 
      self.statusbar = QtGui.QStatusBar(MainWindow) 
      self.statusbar.setObjectName(_fromUtf8("statusbar")) 
      MainWindow.setStatusBar(self.statusbar) 

      self.retranslateUi(MainWindow) 
      QtCore.QMetaObject.connectSlotsByName(MainWindow) 

     def retranslateUi(self, MainWindow): 
      MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) 
      self.pushButton.setText(_translate("MainWindow", "PushButton", None)) 
+0

Ну, 'class_c' * не имеет атрибута' lineEdit'. Что заставляет вас думать, что это так? –

+0

Я хочу разделить проект на несколько частей. –

+0

Итак, я предполагаю, что вы хотите передать то, что находится в 'lineEdit', как текст в' printtext'? –

ответ

0

Ну, один из способов сделать это с помощью обратного вызова метода, таким образом:

В main.py

QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"), self.call_back) 

def call_back(self): 
    txt = str(self.ui.lineEdit.text()) #lineEdit.text() returns QString Object so we need to convert it to String object 
    instance_b.callprinttext(txt) 

Затем в calss_b метод:

def callprinttext (self, txt): 
    from module_c import class_c 
    instance_c=class_c() 
    instance_c.printtext(txt) 

И наконец в вашем class_c:

def printtext (self, txt): 
    t=unicode(txt) 
    print t 

EDIT:

Если вы не хотите, чтобы добавить любой вызов обратно метод, то сделать это с помощью lambda, таким образом:

QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"), \ 
         lambda: instance_b.callprinttext(self.ui.lineEdit.text())) 

И нет никакой необходимости call_back

+0

AttributeError: объект 'MainWindow' не имеет атрибута 'lineEdit' –

+0

и, я не хочу добавлять функции в main.py –

+0

Моя цель: уменьшить количество функции в main.py –

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