Hello list,

i have done a small sample form with a lineEdit, listWidget and some
pushButtons. One of the pushButtons is used to delete the current
selected listWidget-row. In the version which uses connectSlotsByName
2 rows of the listWidget are deleted, behaves like the clicked-signal
is emittet twice. In the version where i manually assign the signals
to my python-slot everything works fine.

Hope someone can give some hints, what i've done wrong, best regards, martin.

Here is the sample-code with connectSlotsByName, look at
on_pushButtonDelete_clicked:
#
#    Uses connectSlotsByName feature
#
import sys
from PyQt4 import QtCore, QtGui
from ui_testform import Ui_TestForm

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

       # Set up the user interface from Designer.
       self.ui = Ui_TestForm()
       self.ui.setupUi(self)

   def on_pushButtonAdd_clicked(self):
       text = self.ui.lineEdit.text()
       if text.length() > 0:
           self.ui.listWidget.addItem(text)
           self.ui.lineEdit.clear()

   def on_pushButtonDelete_clicked(self):
       self.ui.listWidget.takeItem(self.ui.listWidget.currentRow())

   def on_pushButtonCancel_clicked(self):
       self.close()

app = QtGui.QApplication(sys.argv)
ui = AddDialog()
ui.show()
sys.exit(app.exec_())

Here is the code where i manually assign signal and slots:
#
#    manually assign signals to slots
#
import sys
from PyQt4 import QtCore, QtGui
from ui_testform import Ui_TestForm

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

       # Set up the user interface from Designer.
       self.ui = Ui_TestForm()
       self.ui.setupUi(self)

       # Connect up the buttons.
       self.connect(self.ui.pushButtonCancel,QtCore.SIGNAL("clicked()"),
                    self, QtCore.SLOT("close()"))
       self.connect(self.ui.pushButtonAdd,
QtCore.SIGNAL("clicked()"),self.pushButtonAddSlot)
       self.connect(self.ui.pushButtonDelete,
QtCore.SIGNAL("clicked()"), self.pushButtonDeleteSlot)


   def pushButtonAddSlot(self):
       text = self.ui.lineEdit.text()
       if text.length() > 0:
           self.ui.listWidget.addItem(text)
           self.ui.lineEdit.clear()

   def pushButtonDeleteSlot(self):
       self.ui.listWidget.takeItem(self.ui.listWidget.currentRow())

app = QtGui.QApplication(sys.argv)
ui = AddDialog()
ui.show()
sys.exit(app.exec_())

To comlete the code, here is the generated ui:
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'TestForm.ui'
#
# Created: Wed Nov 22 10:21:56 2006
#      by: PyQt4 UI code generator 4.1
#
# WARNING! All changes made in this file will be lost!

import sys
from PyQt4 import QtCore, QtGui

class Ui_TestForm(object):
   def setupUi(self, TestForm):
       TestForm.setObjectName("TestForm")
       
TestForm.resize(QtCore.QSize(QtCore.QRect(0,0,400,300).size()).expandedTo(TestForm.minimumSizeHint()))

       self.vboxlayout = QtGui.QVBoxLayout(TestForm)
       self.vboxlayout.setMargin(9)
       self.vboxlayout.setSpacing(6)
       self.vboxlayout.setObjectName("vboxlayout")

       self.gridlayout = QtGui.QGridLayout()
       self.gridlayout.setMargin(0)
       self.gridlayout.setSpacing(6)
       self.gridlayout.setObjectName("gridlayout")

       self.pushButtonAdd = QtGui.QPushButton(TestForm)
       self.pushButtonAdd.setObjectName("pushButtonAdd")
       self.gridlayout.addWidget(self.pushButtonAdd,0,1,1,1)

       self.listWidget = QtGui.QListWidget(TestForm)
       self.listWidget.setObjectName("listWidget")
       self.gridlayout.addWidget(self.listWidget,1,0,1,1)

       self.lineEdit = QtGui.QLineEdit(TestForm)
       self.lineEdit.setObjectName("lineEdit")
       self.gridlayout.addWidget(self.lineEdit,0,0,1,1)
       self.vboxlayout.addLayout(self.gridlayout)

       spacerItem =
QtGui.QSpacerItem(20,40,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
       self.vboxlayout.addItem(spacerItem)

       self.hboxlayout = QtGui.QHBoxLayout()
       self.hboxlayout.setMargin(0)
       self.hboxlayout.setSpacing(6)
       self.hboxlayout.setObjectName("hboxlayout")

       spacerItem1 =
QtGui.QSpacerItem(40,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
       self.hboxlayout.addItem(spacerItem1)

       self.pushButtonDelete = QtGui.QPushButton(TestForm)
       self.pushButtonDelete.setFocusPolicy(QtCore.Qt.StrongFocus)
       self.pushButtonDelete.setObjectName("pushButtonDelete")
       self.hboxlayout.addWidget(self.pushButtonDelete)

       self.pushButtonCancel = QtGui.QPushButton(TestForm)
       self.pushButtonCancel.setObjectName("pushButtonCancel")
       self.hboxlayout.addWidget(self.pushButtonCancel)
       self.vboxlayout.addLayout(self.hboxlayout)

       self.retranslateUi(TestForm)
       QtCore.QMetaObject.connectSlotsByName(TestForm)
       TestForm.setTabOrder(self.pushButtonAdd,self.lineEdit)
       TestForm.setTabOrder(self.lineEdit,self.listWidget)
       TestForm.setTabOrder(self.listWidget,self.pushButtonDelete)
       TestForm.setTabOrder(self.pushButtonDelete,self.pushButtonCancel)

   def retranslateUi(self, TestForm):
       self.pushButtonAdd.setText(QtGui.QApplication.translate("TestForm",
"Add", None, QtGui.QApplication.UnicodeUTF8))
       self.pushButtonDelete.setText(QtGui.QApplication.translate("TestForm",
"Delete", None, QtGui.QApplication.UnicodeUTF8))
       self.pushButtonCancel.setText(QtGui.QApplication.translate("TestForm",
"Cancel", None, QtGui.QApplication.UnicodeUTF8))

_______________________________________________
PyKDE mailing list    [email protected]
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde

Reply via email to