Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 26, 2014 11:57:33

juno24
Зарегистрирован: 2014-01-26
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Как передать слоту аргумент ?

#!/usr/bin/python
     
import MySQLdb 
import sys
from PyQt4 import QtCore,QtGui
db = MySQLdb.connect(host="localhost", user="root", passwd="xxx", db="dev", charset='utf8')     
class GridLayout(QtGui.QWidget):
  def __init__(self, parent=None):
             QtGui.QWidget.__init__(self, parent)
             
             def slotSaveNumber(num=0):
               sql="INSERT INTO numbers SET number =('"+str(num)+"')"
               cursor = db.cursor()
               cursor.execute(sql)  
             self.setWindowTitle('test')
     
             names = ['1', '2', '3']
     
             grid = QtGui.QGridLayout()
     
             j = 0
             pos = [(0,0),(0,1),(0,2)]
     
             for i in names:
                 button = QtGui.QPushButton(i)
                 grid.addWidget(button, pos[j][0], pos[j][1])
                 #self.connect(button,QtCore.SIGNAL("clicked()"),app,slotSaveNumber(2))  
                   self.connect(button,QtCore.SIGNAL("clicked()"),app,slotSaveNumber)  
                 j = j + 1
                 
  
             self.setLayout(grid)
app = QtGui.QApplication(sys.argv)
qb = GridLayout()
qb.show()
sys.exit(app.exec_())

Подскажите в чем проблема ? Если вызываю слот без аргумента, то все ОК .
self.connect(button,QtCore.SIGNAL(“clicked()”),app,slotSaveNumber)
А если так
#self.connect(button,QtCore.SIGNAL(“clicked()”),app,slotSaveNumber(2))
То ошибка :

self.connect(button,QtCore.SIGNAL(“clicked()”),self,slotSaveNumber(2))
TypeError: arguments did not match any overloaded call:
QObject.connect(QObject, SIGNAL(), QObject, SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 4 has unexpected type ‘NoneType’
QObject.connect(QObject, SIGNAL(), callable, Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type ‘GridLayout’
QObject.connect(QObject, SIGNAL(), SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type ‘GridLayout’

Офлайн

#2 Янв. 26, 2014 13:31:45

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

Как передать слоту аргумент ?

> Подскажите в чем проблема
Что же тут непонятного? slotSaveNumber(2) у тебя возвращает None и следовательно слот у тебя будет None.
Так надо:

self.connect(button, QtCore.SIGNAL("clicked()"), lambda: slotSaveNumber(2)) 



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Янв. 26, 2014 13:32:14)

Офлайн

#3 Янв. 26, 2014 17:21:18

juno24
Зарегистрирован: 2014-01-26
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Как передать слоту аргумент ?

Спасибо, получилось !

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version