appeler une fonction lorsqu'un bouton est enfoncé - pyqt
Im nouveau à cela... je voudrais appeler la fonction "fonction" lorsque je clique sur "btn_brow_3" Comment pourrais-je le faire?
Quelqu'un peut-il m'aider?
Erreur
ERREUR de TYPE connect() logement argument doit être un callable ou un signal non "nonetype"
Ce qui concerne
Maxi
import atexit
import sys
from PyQt4 import QtGui
import os # Libreria para manejar directorios del sistema operativo
def funcion(a):
print "Hola mundo" + str(a)
class Example(QtGui.QMainWindow):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
exitAction = QtGui.QAction(QtGui.QIcon('c:/prueba gui/resource/logo.png'), 'Exit', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.triggered.connect(QtGui.qApp.quit)
btn_brow_1 = QtGui.QPushButton('Browser...', self)
btn_brow_1.resize(btn_brow_1.sizeHint())
btn_brow_1.move(300, 50)
btn_brow_1.clicked.connect(self.showDialog_points)
btn_brow_2 = QtGui.QPushButton('Dir browser', self)
btn_brow_2.resize(btn_brow_2.sizeHint())
btn_brow_2.move(300, 80)
btn_brow_2.clicked.connect(self.showDialog_indir_stl)
btn_brow_3 = QtGui.QPushButton('Dir browser', self)
btn_brow_3.resize(btn_brow_3.sizeHint())
btn_brow_3.move(300, 110)
btn_brow_3.clicked.connect(self.showDialog_outdir_stl)
btn_brow_4 = QtGui.QPushButton('Crear soportes', self)
btn_brow_4.setGeometry(20, 145, 250, 25)
#btn_brow_4.clicked.connect(support.main(fname_points, self.fname_stl_indir, self.fname_stl_outdir))
btn_brow_4.clicked.connect(funcion(12)) # HERE IS THE PROBLEM!
self.le1 = QtGui.QLineEdit(self)
self.le1.setGeometry(20, 50, 250,21)
self.le2 = QtGui.QLineEdit(self)
self.le2.setGeometry(20, 80, 250,21)
self.le3 = QtGui.QLineEdit(self)
self.le3.setGeometry(20, 110, 250,21)
self.statusBar().showMessage("Ready")
self.toolbar = self.addToolBar('Exit')
self.toolbar.addAction(exitAction)
self.setGeometry(300, 300, 400, 200)
self.setWindowTitle('Support from points generator')
self.show()
def showDialog_points(self):
self.fname_points = QtGui.QFileDialog.getOpenFileName(self, 'Open points file', '/home')
self.statusBar().showMessage(str(self.fname_points))
self.le1.setText(str(self.fname_points))
self.fname_points = str(self.le1.text())
print fname_points
def showDialog_indir_stl(self):
self.fname_stl_indir = QtGui.QFileDialog.getExistingDirectory(self, 'Select STL INPUT directory', '/home')
self.statusBar().showMessage(str(self.fname_stl_indir))
self.le2.setText(str(self.fname_stl_indir))
self.fname_stl_indir = str(self.le2.text())
print fname_stl_indir
def showDialog_outdir_stl(self):
self.fname_stl_outdir = QtGui.QFileDialog.getExistingDirectory(self, 'Select STL OUTPUT directory', '/home')
self.statusBar().showMessage(str(self.fname_stl_outdir))
self.le3.setText(str(self.fname_stl_outdir))
self.fname_stl_outdir = str(self.le3.text())
print fname_stl_outdir
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
OriginalL'auteur user2109621 | 2013-02-26
Vous devez vous connecter pour publier un commentaire.
Qt signaux peuvent avoir des arguments qui seront transmis à l'fentes ils sont connectés; un exemple serait la nouvelle valeur comme argument dans un signal
changed
. Par conséquent, si vous peut ont une fente avec des arguments, vous ne pouvez pas définir les valeurs réelles de ceux qui lors de la connexion du signal de la fente, car ils seront définis en émettant le signal.Pour la définition d'un argument au moment de la connexion, vous pouvez utiliser une fonction supplémentaire qui ne fait rien, mais l'appel de la fonction d'origine à la définition de l'argument:
Comme une note de côté:
wrapper
ne pas utiliser des accolades ici: la fonction n'est pas appelée, mais simplement passé comme argument à la fonctionconnect
. Dans votre code, vous appelé votre fonctionfuncion
, qui ne renvoie rien (=None
), qui a été adoptée pourconnect
dans votre code original, résultant dans le message d'erreur que vous avez reçu.À en faire un peu plus propre, vous pouvez également utiliser une fonction anonyme:
Noter que Qt fournit également les moyens de le faire, mais (au moins pour moi) le Python variantes sont plus faciles à lire.
Edit: plus d'information: http://eli.thegreenplace.net/2011/04/25/passing-extra-arguments-to-pyqt-slot/
OriginalL'auteur rainer
Vous pouvez utiliser la méthode ci-dessous pour accéder à la même chose:
OriginalL'auteur Nitish Jain
Essayer Cela,
OriginalL'auteur mg1