2016-04-19 12 views
0

Zunächst möchte ich feststellen, dass meine Frage sehr ähnlich ist: Accessing GUI elements from outside the GUI class. Aber da ich ein Newby in PyQt bin, hätte ich gerne mehr Hilfe.PyQt: Zugriff auf Elemente von außerhalb der Klasse

Ich habe die design.py Datei exportiert von Qt Designer

# -*- 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): 
     MainWindow.setObjectName(_fromUtf8("MainWindow")) 
     MainWindow.resize(150, 94) 
     self.centralwidget = QtGui.QWidget(MainWindow) 
     self.centralwidget.setObjectName(_fromUtf8("centralwidget")) 
     self.lineEdit = QtGui.QLineEdit(self.centralwidget) 
     self.lineEdit.setGeometry(QtCore.QRect(20, 10, 113, 27)) 
     self.lineEdit.setObjectName(_fromUtf8("lineEdit")) 
     self.pushButton = QtGui.QPushButton(self.centralwidget) 
     self.pushButton.setGeometry(QtCore.QRect(30, 40, 85, 27)) 
     self.pushButton.setObjectName(_fromUtf8("pushButton")) 
     MainWindow.setCentralWidget(self.centralwidget) 
     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)) 

, die in die Hauptklasse importiert wird:

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

from PyQt4 import QtGui, QtCore 
import sys 
import design 

class ExampleApp(QtGui.QMainWindow, design.Ui_MainWindow): 
    def __init__(self, parent=None): 
     super(ExampleApp, self).__init__(parent) 
     self.setupUi(self) 
     self.pushButton.clicked.connect(self.button_function) 

    def button_function(self): 
     self.lineEdit.setText('results') 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    form = ExampleApp() 
    form.show() 
    app.exec_()   

if __name__ == '__main__': 
    main()  

So weit, so gut. Ich habe ein Fenster erstellt, in dem ich einen PushButton drücke und eine Nachricht in der EditLine erscheint. Diese

ist das, was ich erreichen will: ich den Druckknopf möchte eine Funktion außerhalb der Klasse (leicht), und diese Funktion auszulösen die Nachricht an den edilTLine (hart) zu liefern. Etwas wie dieses:

def button_function(self): 
     calculations() 

def calculations(): 
    # somehow ... 
    self.lineEdit.setText('results') 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    form = ExampleApp() 
    form.show() 
    app.exec_()   

if __name__ == '__main__': 
    main()  

Jeder möglicher Gedanke würde geschätzt werden. Diese

Antwort

1

ist, was Sie brauchen

def button_function(self): 
     calculations(self) 

def calculations(obj): 
    obj.lineEdit.setText('results') 
+0

Das ist genau das, was ich gefragt. Als du sehr viel. – user3060854

Verwandte Themen