MyGUI
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: MyGUI
Хм.... а у GPin только один тип сигнала, что ли?
Надо ему новый сигнал приделать...
Добавить обработчик на value-changed, который будет проверять, значение стало 1, значит растущей фронт и будет кидать сигнал
self.emit('on-raise', self)
+ надо добавить сигнал on-raise, наверное что-то вроде
gobject.signal_new("signal-name", MyGObjectClass, gobject.SIGNAL_RUN_FIRST, None, (str, int))
http://stackoverflow.com/questions/6673 ... l-in-pygtk
http://www.pygtk.org/docs/pygobject/gob ... signal-new
Надо ему новый сигнал приделать...
Добавить обработчик на value-changed, который будет проверять, значение стало 1, значит растущей фронт и будет кидать сигнал
self.emit('on-raise', self)
+ надо добавить сигнал on-raise, наверное что-то вроде
gobject.signal_new("signal-name", MyGObjectClass, gobject.SIGNAL_RUN_FIRST, None, (str, int))
http://stackoverflow.com/questions/6673 ... l-in-pygtk
http://www.pygtk.org/docs/pygobject/gob ... signal-new
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: MyGUI
это пока мне сложно реализоватьNick писал(а):Надо ему новый сигнал приделать...
хотел через ладдер обойти....
но не тут то было.
дело в том ,что пишу функцию , ну например :
Код: Выделить всё
def abort (self):
self.c.abort
и уже при загрузке скрипта функция отрабатывает
надо как то все это поправить
некоторые вещи можно и с помощью halui решить - но рано или поздно этот вопрос всплывет однозначно...
Ник - хелп!!!!
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: MyGUI
А ты не знаешь, где этот glib.halpin описан в исходниках?
Надо ему прямо туда сигнал прописать.
Плюс можно на время __init__ проигнорировать все сигналы всех пинов.
см: (http://www.pygtk.org/pygtktutorial/ch-a ... gnals.html)
handler_id = object.connect(name, cb, cb_args)
object.signal_handler_block(handler_id)
object.signal_handler_unblock(handler_id)
Надо ему прямо туда сигнал прописать.
Плюс можно на время __init__ проигнорировать все сигналы всех пинов.
см: (http://www.pygtk.org/pygtktutorial/ch-a ... gnals.html)
handler_id = object.connect(name, cb, cb_args)
object.signal_handler_block(handler_id)
object.signal_handler_unblock(handler_id)
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: MyGUI
а где такое встречается - "glib.halpin "Nick писал(а):А ты не знаешь, где этот glib.halpin описан в исходниках?
я думаю что это в hal_glib.py:
Код: Выделить всё
class GPin(gobject.GObject, hal.Pin):
__gtype_name__ = 'GPin'
__gsignals__ = {'value-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ())}- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: MyGUI
Наверное как-то так должно сработать:
И после этого появятся два новых сигнала.
И после этого появятся два новых сигнала.
Код: Выделить всё
class GPin(gobject.GObject, hal.Pin):
__gtype_name__ = 'GPin'
__gsignals__ = {'value-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()),
'raise': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()),
'fall': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ())}
#############
# трампампам
#############
def update(self):
tmp = self.get()
if tmp != self._prev:
self.emit('value-changed')
if self.tmp > self._prev:
self.emit('raise')
else :
self.emit('fall')
self._prev = tmp
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: MyGUI
подправил:
загружается без ошибки
потестируем....
Код: Выделить всё
def update(self):
tmp = self.get()
if tmp != self._prev:
self.emit('value-changed')
elif tmp > self._prev:
self.emit('raise')
else :
self.emit('fall')
self._prev = tmpпотестируем....
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: MyGUI
Не, там нужно именно if, а вот во втором случае нужно подравить:
==========
Точнее даже не так, надо все под первый if завести:
==========
Точнее даже не так, надо все под первый if завести:
Код: Выделить всё
def update(self):
tmp = self.get()
if tmp != self._prev:
self.emit('value-changed')
if tmp > self._prev:
self.emit('raise')
else:
self.emit('fall')
self._prev = tmp
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: MyGUI
Estop у меня на комп вообще не заведенNick писал(а):Главное Estop через такой пин не проводи - Estop только через realtime!
он просто будет отрубать питание
----------------
а вот с последними исправлениями скрипт опять начал при загрузке проверять пины
тут бы подразобраться :
как я понимаю - теперь пины имеют три состояния: None, True, и False
может None не нужен ?
а то получается проверка начинается с if tmp != self._prev:
что равнозначно if tmp != None :
получаем истину и сразу коннектимся к 'value-changed'
а потом второй if уже коннектит к 'raise'
или это так не работает
тогда почему срабатывают функции????
---------------------
upd
проверил убрав строки
Код: Выделить всё
if tmp != self._prev:
self.emit('value-changed')значит там не все так как я думал
или совсем не так
-----------
upd2
и такой вопрос:
получается в питоне False<None<True ???
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: MyGUI
вроде должно быть None<False<True, сейчас проверю
-----
так и есть
>>> None<False<True
True
Можно добавить if tmp == None : return
можно это добавить только для новых сигналов...
-----
так и есть
>>> None<False<True
True
Можно добавить if tmp == None : return
можно это добавить только для новых сигналов...
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: MyGUI
ну вот кусок твоего кода:
так вот при загрузке скрипта функция self.click_button_v отрабатывает 8 раз
Код: Выделить всё
for i in range(8) :
self.vtriggers.append(hal_glib.GPin(self.halcomp.newpin('vbutton.%s'%i, hal.HAL_BIT, hal.HAL_IN)))
self.vtriggers[-1].connect("raise",self.click_button_v, self.widgets.notebook2, i)- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: MyGUI
хм....
надо подумать...
как бы так отловить тот момент, когда все это происходит....
Попробуй перед connect добавить self.vtriggers[-1].update() может тогда он бросит сигнал и значение обновится. И самое главное задастся _prev.
надо подумать...
как бы так отловить тот момент, когда все это происходит....
Попробуй перед connect добавить self.vtriggers[-1].update() может тогда он бросит сигнал и значение обновится. И самое главное задастся _prev.
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: MyGUI
Ник ,Nick писал(а):перед connect добавить self.vtriggers[-1].update()
есть подозрение , что у тебя уже все написано , и ты по кусочку тут выдаешь
чем же еще объяснить такие точные попадания))))))
(надо конечно потестировать во всех режимах - но подвижки явные - при загрузке тишина!!)
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: MyGUI
Ник!Nick писал(а):class GPin(gobject.GObject, hal.Pin): __gtype_name__ = 'GPin' __gsignals__ = {'value-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), 'raise': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), 'fall': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ())}
а нельзя это продвинуть в емс вообще?
я было забыл что изменил этот модуль - потом час потратил после обновления пока
врубился в чем дело
сигналы вроде бы нужные ...
напомню - это в hal_glib.py
