Найти - Пользователи
Полная версия: PyQt4 и connect() Передача аргумета методу
Начало » GUI » PyQt4 и connect() Передача аргумета методу
1
Guljaca
При попытке передать аргумент возникает ошибка. Что она означает? Как решить проблему?
> 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'
py.user.next
попробуй после print 2 поставить return 2
Guljaca
py.user.next
попробуй после print 2 поставить return 2

>1
>2
Та же ошибка, только в конце type ‘int’, либо type ‘str’, если с вернуть текст
mironich
Сейчас же доступен новый синтаксис сигналов и слотов.
self.button.clicked.connect(self.test)

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

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

Guljaca
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
mironich
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
Guljaca
Как добавить/отобразить группу кнопок в окне?
Ну как обычно ты это делаешь, этот виджет отвечает только за группировку кнопок, дабы удобо было обращаться к ним по ID, и отлавливать клики. и пр., остальное через слои например(разместить).
Guljaca
mironich
Ну как обычно ты это делаешь, этот виджет отвечает только за группировку кнопок, дабы удобо было обращаться к ним по ID, и отлавливать клики. и пр., остальное через слои например(разместить).
Дописал как обычно
self.hbox.addWidget(self.button)
self.setLayout(self.hbox)

Строка print key показывает id(?)
<PyQt4.QtGui.QPushButton object at 0x00000000038541E0>
А как саму 1-цу вывести? Нужно передать ключи словаря (текст и числа) функции
reclosedev
Еще варианты:
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"))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB