Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » PyQt4 и connect() Передача аргумета методу [RSS Feed]

#1 Сен. 1, 2012 13:04:30

Guljaca
От:
Зарегистрирован: 2011-07-11
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 и connect() Передача аргумета методу

При попытке передать аргумент возникает ошибка. Что она означает? Как решить проблему?
> 1
> 2
> 1

class Test(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.button = QtGui.QPushButton('')
        self.button.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_E))
        self.button.setMaximumSize(100,100)
        self.key = 'G'
        print 1
        self.connect(self.button, QtCore.SIGNAL('clicked()'), self.test(self.key))
    def test(self,key):
        items[key].amount += 1
        print 2

QObject.connect(QObject, SIGNAL(), QObject, SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'NoneType'
QObject.connect(QObject, SIGNAL(), callable, Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'NoneType'
QObject.connect(QObject, SIGNAL(), SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'NoneType'



Отредактировано Guljaca (Сен. 1, 2012 13:05:42)

Офлайн

#2 Сен. 1, 2012 13:35:30

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

PyQt4 и connect() Передача аргумета методу

попробуй после print 2 поставить return 2



Офлайн

#3 Сен. 1, 2012 14:00:28

Guljaca
От:
Зарегистрирован: 2011-07-11
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 и connect() Передача аргумета методу

py.user.next
попробуй после print 2 поставить return 2

>1
>2
Та же ошибка, только в конце type ‘int’, либо type ‘str’, если с вернуть текст



Офлайн

#4 Сен. 1, 2012 18:02:40

mironich
От:
Зарегистрирован: 2011-05-23
Сообщения: 118
Репутация: +  2  -
Профиль   Отправить e-mail  

PyQt4 и connect() Передача аргумета методу

Сейчас же доступен новый синтаксис сигналов и слотов.

self.button.clicked.connect(self.test)

Так делать нельзя:
self.connect(self.button, QtCore.SIGNAL('clicked()'), self.test(self.key)) #Тут ты передаешь не слот в кач-ве аргумента, а результат выполнения функции self.test Т.К она не чего не возвращает третьим аргументов передается None, и выскакивает ошибка что вызов функции не совпадает не с одним из перегруженных методов.

Можешь воспользоваться QGroupButton, там в сигнале клика передается ID кнопки который можно при добавлении кнопки задать.



Офлайн

#5 Сен. 2, 2012 00:43:27

Guljaca
От:
Зарегистрирован: 2011-07-11
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 и connect() Передача аргумета методу

mironich
Можешь воспользоваться QGroupButton, там в сигнале клика передается ID кнопки который можно при добавлении кнопки задать.

Можно подробнее? Лучше готовый пример класса.
Нашел документацию для QGroupButton, но не разобрался. Собирал по теме на одном из здешних форумов:
class Window(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.hbox = QtGui.QHBoxLayout()
        self.bGroup = QtGui.QButtonGroup()
        self.button = QtGui.QPushButton()
        self.bGroup.addButton(self.button,1)
Как понял, добавил в группу кнопку с id 1

Как передать id 1 вызываемой фунции?
Как добавить/отобразить группу кнопок в окне?

Тщетная попытка
self.connect(self.bGroup, QtCore.SIGNAL('buttonClicked(int)'), self.func)
        self.hbox.addLayout(self.bGroup)
        self.setLayout(self.hbox)
    def func(self.key):
        pass



Отредактировано Guljaca (Сен. 2, 2012 00:50:00)

Офлайн

#6 Сен. 2, 2012 01:46:19

mironich
От:
Зарегистрирован: 2011-05-23
Сообщения: 118
Репутация: +  2  -
Профиль   Отправить e-mail  

PyQt4 и connect() Передача аргумета методу

class Window(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.hbox = QtGui.QHBoxLayout()
        self.bGroup = QtGui.QButtonGroup()
        self.button = QtGui.QPushButton()
        self.bGroup.addButton(self.button,1)
       self.bGroup.buttonClicked.connect(self.func)
def func(self, key):
        print key

У тебя в коде ошибка:
def func(self.key): #Вместо self.key, self, key



Отредактировано mironich (Сен. 2, 2012 01:47:56)

Офлайн

#7 Сен. 2, 2012 01:50:21

mironich
От:
Зарегистрирован: 2011-05-23
Сообщения: 118
Репутация: +  2  -
Профиль   Отправить e-mail  

PyQt4 и connect() Передача аргумета методу

Guljaca
Как добавить/отобразить группу кнопок в окне?
Ну как обычно ты это делаешь, этот виджет отвечает только за группировку кнопок, дабы удобо было обращаться к ним по ID, и отлавливать клики. и пр., остальное через слои например(разместить).



Офлайн

#8 Сен. 2, 2012 02:13:26

Guljaca
От:
Зарегистрирован: 2011-07-11
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 и connect() Передача аргумета методу

mironich
Ну как обычно ты это делаешь, этот виджет отвечает только за группировку кнопок, дабы удобо было обращаться к ним по ID, и отлавливать клики. и пр., остальное через слои например(разместить).
Дописал как обычно
self.hbox.addWidget(self.button)
self.setLayout(self.hbox)

Строка print key показывает id(?)
<PyQt4.QtGui.QPushButton object at 0x00000000038541E0>
А как саму 1-цу вывести? Нужно передать ключи словаря (текст и числа) функции



Отредактировано Guljaca (Сен. 2, 2012 02:35:22)

Офлайн

#9 Сен. 2, 2012 12:01:02

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

PyQt4 и connect() Передача аргумета методу

Еще варианты:
http://python.su/forum/post/91686/

import functools
self.button.clicked.connect(functools.partial(self.test, "G"))
self.button.clicked.connect(lambda : self.test("G"))

Офлайн

  • Начало
  • » GUI
  • » PyQt4 и connect() Передача аргумета методу[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version