Seite 1 von 1

connect pushbutton mit methode

Verfasst: Donnerstag 8. November 2012, 17:03
von Idefix_1024
Hallo,

ich würde gerne durch das Drücken verschiedener pushButtons eine methode mit verschiedenen Parametern aufrufen. Im Beispiel habe ich eine Funktion für Knopf 1 und eine für Knopf 2 aber ich würde gerne alle Knöpfe mit der Funktion funct_buttonAllg verknüpfen und nur den Parameter abhängig vom Knopf angepasst übergeben. Leider kann man das wohl nicht durch

Code: Alles auswählen

self.connect(self.ui.PB_button3, QtCore.SIGNAL("clicked()"),
                     self.funct_buttonAllg(3))  
also was tun?

Code: Alles auswählen

#!/usr/bin/python
# -*- encoding: utf8 -*-

from PyQt4 import QtCore, QtGui, uic

class WritableObject:
    def __init__(self):
        self.content = []
        
    def write(self, string):
        self.content.append(string)

class GUI(QtGui.QDialog):
    def __init__(self):
                        
        QtGui.QDialog.__init__(self)

        self.ui = uic.loadUi('uiGUI.ui')
        self.ui.show()

        # redirect print to console to widget
        self.consoleBuffer = WritableObject()
        sys.stdout = self.consoleBuffer 
        
        self.connect(self.ui.PB_button1, QtCore.SIGNAL("clicked()"),
                     self.funct_button1)
        self.connect(self.ui.PB_button2, QtCore.SIGNAL("clicked()"),
                     self.funct_button2)
        self.connect(self.ui.PB_button3, QtCore.SIGNAL("clicked()"),
                     self.funct_buttonAllg)        
    
    # functions for the buttons
    def funct_button1(self):
        print "Button 1 pressed"
        self.printToConsole()
    
    def funct_button2(self):
        print "Button 2 pressed"
        self.printToConsole()
    
    def funct_buttonAllg(self, value=1):
        print "Button " + str(value) + " pressed"
        self.printToConsole()
        
    def printToConsole(self):
        self.ui.TE_console.clear()
        self.ui.TE_console.insertPlainText(''.join(self.consoleBuffer.content))
        self.ui.TE_console.ensureCursorVisible()

# ----------------------------------------------------------------------------
if __name__ == "__main__":
    import sys
    from PyQt4 import QtCore, QtGui, uic
    
    app = QtGui.QApplication(sys.argv)
    objGUI = GUI()
    sys.exit(app.exec_())
    
# ----------------------------------------------------------------------------

Re: connect pushbutton mit methode

Verfasst: Donnerstag 8. November 2012, 17:11
von EyDu
functools.partial

Re: connect pushbutton mit methode

Verfasst: Donnerstag 8. November 2012, 17:18
von Idefix_1024
vielen Dank!

das ging erstaunlich einfach... und ich habe wirklich mehr als 30 Min bei google gesucht *kopfschüttl*

Code: Alles auswählen

self.connect(self.ui.PB_button3, QtCore.SIGNAL("clicked()"),
                     functools.partial(self.funct_buttonAllg,3)) 
löst das Problem!

Re: connect pushbutton mit methode

Verfasst: Donnerstag 8. November 2012, 22:39
von BlackJack
@Idefix_1024: Jetzt könntest Du noch die modernere Art der Verknüpfung zwischen Signal und Slot verwenden:

Code: Alles auswählen

self.ui.PB_button3.clicked.connect(partial(self.funct_buttonAllg, 3))