Argument in Funktion übergeben

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
möppi
User
Beiträge: 39
Registriert: Samstag 29. März 2014, 09:18

Hi,

Ich wollte eine Funktion erstellen, die in Verbindung mit Klicken eines Push Buttons ein LineEdit löscht. Ich habe das bisher so gemacht:

Code: Alles auswählen

import sys
from functools import partial
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.uic import *
import exe

def main():
    
    application = QApplication(sys.argv)
    frame = loadUi('inter.ui')
        
    def clear_line():
        frame.lineEdit.clear()

    frame.pushButton.clicked.connect(clear_line)

    frame.show()
    sys.exit(application.exec_())
 
if __name__ == '__main__':
    main()
Das ist aber ein wenig Mühselig, wenn ich für jedes Lineedit eine seperate Funktion definieren muss. Statdessen will ich mit 'connect' gleichzeitig ein Argument in die Funktion 'clear_line' übergeben. Also so was (was allerdings nicht funktioniert):

Code: Alles auswählen

import sys
from functools import partial
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.uic import *
import exe

def main():
    
    application = QApplication(sys.argv)
    frame = loadUi('inter.ui')
        
    def clear_line(some_lineEdit):
        some_lineEdit.clear()

    frame.pushButton.clicked.connect(clear_line(frame.lineEdit))

    frame.show()
    sys.exit(application.exec_())
 
if __name__ == '__main__':
    main()
Wie kann man das am geschicktesten programmieren?
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@möppi: mit functools.partial.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Probier das mal:

Code: Alles auswählen

frame.pushButton.clicked.connect(frame.lineEdit.clear)
a fool with a tool is still a fool, www.magben.de, YouTube
möppi
User
Beiträge: 39
Registriert: Samstag 29. März 2014, 09:18

MagBen hat geschrieben:Probier das mal:

Code: Alles auswählen

frame.pushButton.clicked.connect(frame.lineEdit.clear)
Komisch. Ich war mir 100% sicher, dass ich das schon ausprobiert habe. Hab es jetzt wieder versucht und es klappt. Danke
midas
User
Beiträge: 7
Registriert: Mittwoch 16. Juli 2014, 06:56

Auch wenn das Problem schon gelöst ist du kannst der Funktion clear_line auch ein Parameter übergeben mit Hilfe einer Lambda Funktion

frame.pushButton.clicked.connect(lamda: clear_line(paramter))
Antworten