2015-12-27 27 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 –

相關問題