Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » PyQt4. Реализация собств. слотов на Python ? [RSS Feed]

#1 Ноя. 10, 2008 09:25:43

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4. Реализация собств. слотов на Python ?

Добрый день.
Пробую реализовать свой слот на PyQt4, чего-то не идет.
Программа при каждом нажатии на кнопку печатает в консоли счетчик нажатий.
На С++ - все работает.
Counter.py

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui,QtCore
WHAT=0 # глоб. прем. - счетчик

class Counter(QtGui.QWidget): # класс счетчиков
def __init__(self,*args): # конструктор
QtGui.QWidget.__init__(self,*args)
def myreaction(): # реализация слота
global WHAT
WHAT +=1
print "It's myreaction WHAT=",WHAT

if __name__=="__main__":
app = QtGui.QApplication(sys.argv)
counter=Counter() # создаем объект
button = QtGui.QPushButton() # создаем кнопку

# 1) QtCore.QObject.connect(button, QtCore.SIGNAL("clicked()"), Counter().myreaction())
# 2) QtCore.QObject.connect(button, QtCore.SIGNAL("clicked()"), Counter.myreaction())
# 3)QtCore.QObject.connect(button, QtCore.SIGNAL("clicked()"), counter, Counter.myreaction())
print WHAT # дублирующая печать
button.show()
sys.exit(app.exec_())
Ругается на закомментированые строчки:
1)TypeError: myreaction() takes no arguments (1 given)

2)TypeError: unbound method myreaction() must be called with Counter instance as first argument (got nothing instead)

3) То же,что и 2)

Если надо могу рабочий код C++ привести.

Заранее спасибо.



Офлайн

#2 Ноя. 10, 2008 13:04:50

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

PyQt4. Реализация собств. слотов на Python ?

человек, у тебя отступы поплыли и ты self для метода myreaction не указал, в общем, учи матчасть питона.



Офлайн

#3 Ноя. 10, 2008 14:21:09

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4. Реализация собств. слотов на Python ?

j2a
человек, у тебя отступы поплыли и ты self для метода myreaction не указал, в общем, учи матчасть питона.
Отступы - это при передаче(kate). А по существу ? :)



Офлайн

#4 Ноя. 10, 2008 16:54:08

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4. Реализация собств. слотов на Python ?

Разобрался. Может кому интересно:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui,QtCore
WHAT=1

class Counter(QtGui.QPushButton):
global WHAT
what=WHAT
def __init__(self, parent=None):
super(Counter, self).__init__(parent)
self.connect(self, QtCore.SIGNAL("clicked()"), self.myreaction)

def myreaction(self):
self.emit(QtCore.SIGNAL("mysignal"), self.what)

def myprint(self,what):
global WHAT
what = WHAT
print "It's myprint WHAT=%d" % what
WHAT +=1

if __name__=="__main__":
app = QtGui.QApplication(sys.argv)
counter = Counter()

QtCore.QObject.connect(counter, QtCore.SIGNAL("mysignal"), counter.myprint)

counter.show()
sys.exit(app.exec_())



Офлайн

#5 Ноя. 10, 2008 19:07:10

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4. Реализация собств. слотов на Python ?

Можно и без self

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui,QtCore
WHAT=0 # глоб. прем. - счетчик

class Counter(QtGui.QWidget): # класс счетчиков
def __init__(self,*args): # конструктор
QtGui.QWidget.__init__(self,*args)

def myreaction(): # реализация слота
global WHAT
WHAT +=1
print "It's myreaction WHAT=",WHAT

if __name__=="__main__":
app = QtGui.QApplication(sys.argv)
counter=Counter() # создаем объект
button = QtGui.QPushButton() # создаем кнопку

QtCore.QObject.connect(button, QtCore.SIGNAL("clicked()"),myreaction)

button.show()
sys.exit(app.exec_())



Офлайн

#6 Ноя. 10, 2008 20:25:58

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

PyQt4. Реализация собств. слотов на Python ?

Ну да, в первом случае – метод класса, во втором – функция. Не чувствуешь разницы?



Офлайн

#7 Ноя. 11, 2008 02:53:15

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4. Реализация собств. слотов на Python ?

j2a
Тонкое наблюдение … Учту при общении с вами.



Офлайн

#8 Ноя. 11, 2008 14:54:47

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

PyQt4. Реализация собств. слотов на Python ?

Что-то тут не так, учитывая что я вижу слово global в коде.

Офлайн

  • Начало
  • » GUI
  • » PyQt4. Реализация собств. слотов на Python ?[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version