2015-12-27 26 views
0

我有一个GUI应用程序AttributeError的:“class_c”的对象在<code>moduel_b.py</code>没有属性“lineEdit”

  1. 我把文本到文本框,然后点击按钮,
  2. 功能callprinttext()被称为。
  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方法中:

​​

编辑:

如果你不想要的,那么就用它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 –

相关问题