On Monday 01 August 2011, 22:20:32 Magnus Wirström wrote: > Hi > > I am sorry if this have been asked before :) > > I am trying to learn using python and pyqt using ERIC 5.1.2. I have a > problem with signals and slots. I tried this on 2 different computer > with different OS and different version of python. My problem is > this... > > I am creating a "test" project using Eric ... using one of the > tuturials on Eric's webpage. I create a project and a form, then i > add a push button. I save the form and i generate the form into code > using Eric I also generate dialog code and adding a slot for my push > button. So far i have not written a single line of code. In my slot i > write a print("Hello"), My only self written code. When i run this, i > get a window with my button but when i click it nothing happens. When > have i done wrong? How can i get my button to execute the slot?
You should get the "Hello" printed in console on start up, don't you? See below. > thanks for the help ... sorry if this is a stupid question ;) > > Here is the code: > > > # Form implementation generated from reading ui file > '/home/magnus/eric/test/testui.ui' > # > # Created: Mon Aug 1 22:16:17 2011 > # by: PyQt4 UI code generator 4.8.4 > # > # WARNING! All changes made in this file will be lost! > > from PyQt4 import QtCore, QtGui > > try: > _fromUtf8 = QtCore.QString.fromUtf8 > except AttributeError: > _fromUtf8 = lambda s: s > > class Ui_Dialog(object): > def setupUi(self, Dialog): > Dialog.setObjectName(_fromUtf8("Dialog")) > Dialog.resize(400, 300) > self.pushButton = QtGui.QPushButton(Dialog) > self.pushButton.setGeometry(QtCore.QRect(140, 130, 83, 25)) > self.pushButton.setObjectName(_fromUtf8("pushButton")) > > self.retranslateUi(Dialog) > QtCore.QObject.connect(self.pushButton, > QtCore.SIGNAL(_fromUtf8("clicked()")), Dialog.exec) > QtCore.QMetaObject.connectSlotsByName(Dialog) > > def retranslateUi(self, Dialog): > Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", > "Dialog", None, QtGui.QApplication.UnicodeUTF8)) > > self.pushButton.setText(QtGui.QApplication.translate("Dialog", > "PushButton", None, QtGui.QApplication.UnicodeUTF8)) > > > if __name__ == "__main__": > import sys > app = QtGui.QApplication(sys.argv) > Dialog = QtGui.QDialog() > ui = Ui_Dialog() > ui.setupUi(Dialog) > Dialog.show() > sys.exit(app.exec_()) > > > --------------------------------------------------------------------- >---------------------------------------------------------------------- >---------------------------------------------------------------------- > > > # -*- coding: utf-8 -*- > > """ > Module implementing Dialog. > """ > > from PyQt4.QtCore import * > from PyQt4.QtGui import QDialog > > from .Ui_testui import Ui_Dialog > > class Dialog(QDialog, Ui_Dialog): > """ > Class documentation goes here. > """ > def __init__(self, parent = None): > """ > Constructor > > @param parent reference to the parent widget (QWidget) > """ > QDialog.__init__(self, parent) > self.setupUi(self) > QtCore.QObject.connect(self.pushButton, > QtCore.SIGNAL(_fromUtf8("clicked()")), self.on_pushButton_clicked()) ^^ You're calling the signal handler here, resulting in connecting the signal to None. While at it, use the "new" style signals/slots: self.pushButton.clicked.connect(self.on_pushButton_clicked) Looking much nicer, doesn't it? ("new, as in "only a couple of years old…") And it should do, what you want, does it? > @pyqtSlot() > def on_pushButton_clicked(self): > """ > Slot documentation goes here. > """ > print("hello") Pete _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt