Форум сайта python.su
Добрый день.
Пробую реализовать свой слот на 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_())
Офлайн
человек, у тебя отступы поплыли и ты self для метода myreaction не указал, в общем, учи матчасть питона.
Офлайн
j2aОтступы - это при передаче(kate). А по существу ? :)
человек, у тебя отступы поплыли и ты self для метода myreaction не указал, в общем, учи матчасть питона.
Офлайн
Разобрался. Может кому интересно:
#!/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_())
Офлайн
Можно и без 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_())
Офлайн
Ну да, в первом случае – метод класса, во втором – функция. Не чувствуешь разницы?
Офлайн
j2a
Тонкое наблюдение … Учту при общении с вами.
Офлайн
Что-то тут не так, учитывая что я вижу слово global в коде.
Офлайн