MyGUI

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.

Re: MyGUI

Сообщение Nick » 27 ноя 2012, 14:07

nkp писал(а):но ты прав - зачем занимать "драгоценные"/ IO , когда енкодеры пустуют...

Так вроде там и пины останутся и энкодер будет. Т.е. не нужен энкодер, его просто игнорируем. Если использовать эти пины не как энкодер, то энкодер будет шагать в разные стороны. Т.е. он пинов не добавляет, но и не уменьшает. имхо :)
nkp писал(а):мне кажеться в емс нет прямых инструментов ,чтоб сделать по второму способу

А почему ты не хочешь с аналоговым входом и резистором?
Аватара пользователя
Nick
Мастер
 
Сообщения: 22552
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1571
Заслуга: Developer
Медальки:

Re: MyGUI

Сообщение nkp » 27 ноя 2012, 18:22

Nick писал(а):А почему ты не хочешь с аналоговым входом и резистором?

я и хочу и делаю так :)
про отсутствие средств - имел в виду обойтись только хал
а пробую примерно так:
Код: Выделить всёРазвернуть
self.halcomp.newpin("feed", hal.HAL_FLOAT, hal.HAL_IN)
self.c = linuxcnc.command()
self.feedrate=self.c.feedrate(self.halcomp["feed"])

в хал :
Код: Выделить всёРазвернуть
net feed_an  hm2_5i25.0.7i77.0.0.analogin0  mygui.feed

только если self.c.feedrate прописать в инициализацию - то получаем ошибку,
а вот привязав к функции home_all работает нормально...
nkp
Мастер
 
Сообщения: 7697
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1401
Медальки:

Re: MyGUI

Сообщение nkp » 27 ноя 2012, 21:32

при загрузке емс подача устанавливается в соответствии с analogin.
а вот как изменения отслеживать в скрипте ???
nkp
Мастер
 
Сообщения: 7697
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1401
Медальки:

Re: MyGUI

Сообщение nkp » 27 ноя 2012, 23:11

нет ли в хал готового компонента - чтоб отслеживать изменения
float сигнала и выдавать на выходе bit ???
Набросал подобное что то:
Код: Выделить всёРазвернуть
#!/usr/bin/python
import hal , time

h = hal.component("feed_change")
h.newpin("feed_change", hal.HAL_FLOAT, hal.HAL_IN)
h.newpin("feed_change_sig", hal.HAL_BIT, hal.HAL_OUT)
h.ready()

h["feed_change_sig"] = 0
try:
    while 1:
              a=h["feed_change"]
   time.sleep(0.1)
   if h["feed_change"] != a :
      h["feed_change_sig"] = 1
   else:
      h["feed_change_sig"] = 0
except KeyboardInterrupt:
    raise SystemExit

то есть от изменения "feed_change" (FLOAT),на который заведен analogin0 (наш резистор) срабатывает "feed_change_sig" (BIT) и запускает в скрипте функцию обновления
значения feed:
Код: Выделить всёРазвернуть
self.feedrate=self.c.feedrate(self.halcomp["feed_change"])

как то громоздко все получается...
как проще это сделать??
зы
или сразу функцию обновления в компоненте прописать??
Код: Выделить всёРазвернуть
#!/usr/bin/python
import hal , time , linuxcnc

h = hal.component("feed_change")
h.newpin("feed_change", hal.HAL_FLOAT, hal.HAL_IN)
h.ready()
c = linuxcnc.command()
try:
    while 1:
        a=h["feed_change"]
   time.sleep(0.1)
   if h["feed_change"] != a :
      feedrate=c.feedrate(h["feed_change"])
except KeyboardInterrupt:
    raise SystemExit

если так еще будет работать (не проверял)
nkp
Мастер
 
Сообщения: 7697
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1401
Медальки:

Re: MyGUI

Сообщение nkp » 28 ноя 2012, 00:08

Не забыть маштабировать в хал сигнал для c.feedrate от 0 до 1.2 (или лучше в ини поставить 1.5)
Еще можно попробовать "загрубить" регулятор (софтово) :
разбить шкалу на 30 - 60 (?) делений - думаю так точнее будет и без плаванья
nkp
Мастер
 
Сообщения: 7697
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1401
Медальки:

Re: MyGUI

Сообщение Nick » 28 ноя 2012, 09:27

Чего-то я не понял, ты что именно хочешь менять, и чем тебе feed-override не нравится???

nkp писал(а):нет ли в хал готового компонента - чтоб отслеживать изменения float сигнала и выдавать на выходе bit ???

Тебе какое изменение надо отследить? Растущий фронт, или тупо любое изменение?
Аватара пользователя
Nick
Мастер
 
Сообщения: 22552
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1571
Заслуга: Developer
Медальки:

Re: MyGUI

Сообщение nkp » 28 ноя 2012, 21:20

Nick писал(а): что именно хочешь менять, и чем тебе feed-override не нравится???

прямо талант у меня - все усложнять :) (куда бы его применить?)
Код: Выделить всёРазвернуть
loadrt conv_float_s32
conv-float-s32.0 servo-thread

net conv conv-float-s32.0.in hm2_5i25.0.7i77.0.0.analogin0
net feed-override  halui.feed-override.value  conv-float-s32.0.out
nkp
Мастер
 
Сообщения: 7697
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1401
Медальки:

Re: MyGUI

Сообщение Nick » 28 ноя 2012, 21:40

Кстати, можешь попробовать еще вот на этот пин завести, и без conv:
halui.feed-override.scale float in
Аватара пользователя
Nick
Мастер
 
Сообщения: 22552
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1571
Заслуга: Developer
Медальки:

Re: MyGUI

Сообщение Lexxa » 01 дек 2012, 03:12

это не должно работать
nkp писал(а):loadrt conv_float_s32
conv-float-s32.0 servo-thread

net conv conv-float-s32.0.in hm2_5i25.0.7i77.0.0.analogin0
net feed-override  halui.feed-override.value  conv-float-s32.0.out

поскольку
halui.feed-override.count-enable (bit, in) (default: TRUE) When TRUE, modify feed override when counts changes.
halui.feed-override.counts (s32, in) counts X scale = feed override percentage
halui.feed-override.decrease (bit, in) pin for decreasing the FO (-=scale)
halui.feed-override.direct-value (bit, in)pin to enable direct value feed override input
halui.feed-override.increase (bit, in) pin for increasing the FO (+=scale)
halui.feed-override.scale (float, in) pin for setting the scale on changing the FO
halui.feed-override.value (float, out) current Feed Override value
Поэтому исходя из формулы [counts X scale = feed override percentage] надо либо counts halui.feed-override.counts энкодером крутить и ставить halui.feed-override.scale = const (хотя ничего не мешает его тоже крутить),
либо наоборот, а для пущей красоты еще и ограничить его сверху и снизу.
В итоге:
Код: Выделить всёРазвернуть
loadrt limit1
addf limit1.0 servo-thread
setp limit1.0.min 0
setp limit1.0.max 12
net feed-override-in hm2_5i25.0.7i77.0.0.analogin0 => limit1.0.in
#feed override percentage = counts X scale
setp halui.feed-override.counts 10
net feed-override-lim limit1.0.out => halui.feed-override.scale

можно кстати даже скорость нарастания ограничить, но мне кажется это лишним.
Комната залита кровью, я занимаюсь любовью!
Аватара пользователя
Lexxa
Мастер
 
Сообщения: 2575
Зарегистрирован: 16 дек 2011, 16:48
Откуда: ryazan
Репутация: 298
Медальки:
Настоящее имя: Алексей

Re: MyGUI

Сообщение nkp » 01 дек 2012, 08:09

Lexxa писал(а):это не должно работать
nkp писал(а):loadrt conv_float_s32...

этот кусок работает - не вижу причин для обратного
поскольку
halui.feed-override.count-enable (bit, in) (default: TRUE) When TRUE, modify feed override when counts changes.
halui.feed-override.counts (s32, in) counts X scale = feed override percentage
halui.feed-override.decrease (bit, in) pin for decreasing the FO (-=scale)
halui.feed-override.direct-value (bit, in)pin to enable direct value feed override input
halui.feed-override.increase (bit, in) pin for increasing the FO (+=scale)
halui.feed-override.scale (float, in) pin for setting the scale on changing the FO
halui.feed-override.value (float, out) current Feed Override value
Поэтому исходя из формулы [counts X scale = feed override percentage] надо либо counts halui.feed-override.counts энкодером крутить и ставить halui.feed-override.scale = const (хотя ничего не мешает его тоже крутить),

+1
либо наоборот, а для пущей красоты еще и ограничить его сверху и снизу.
В итоге:
Код: Выделить всёРазвернуть
loadrt limit1
addf limit1.0 servo-thread
setp limit1.0.min 0
setp limit1.0.max 12
net feed-override-in hm2_5i25.0.7i77.0.0.analogin0 => limit1.0.in
#feed override percentage = counts X scale
setp halui.feed-override.counts 10
net feed-override-lim limit1.0.out => halui.feed-override.scale

можно кстати даже скорость нарастания ограничить, но мне кажется это лишним.

halui.feed-override уже сам ограничевает сигнал от 0 до 1.2 (остаётся только маштабировать)
nkp
Мастер
 
Сообщения: 7697
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1401
Медальки:

Re: MyGUI

Сообщение Lexxa » 02 дек 2012, 21:03

я имел ввиду именно фид-оверрайд
кстати говоря ацп. 4 штуки - мало. очень мало. 4 ацп это только для пульта хватит, но помнится Dmaster, вроде, имел косяк со сломавшимся энкодером, и емс почему-то этого не видела. Сигнал с тахогенераторов можно было б подвесить туда
Комната залита кровью, я занимаюсь любовью!
Аватара пользователя
Lexxa
Мастер
 
Сообщения: 2575
Зарегистрирован: 16 дек 2011, 16:48
Откуда: ryazan
Репутация: 298
Медальки:
Настоящее имя: Алексей

Re: MyGUI

Сообщение Nick » 05 дек 2012, 12:40

nkp писал(а):halui.feed-override.value (float, out) current Feed Override value

Да, и правда, надо не value использовать, а counts, при этом, если у нас не энкодер, то можно на него прямое значение подавать, для этого есть пин direct-value:
halui.feed-override.counts (s32, in) counts X scale = feed override percentage
halui.feed-override.direct-value (bit, in)pin to enable direct value feed override input
Аватара пользователя
Nick
Мастер
 
Сообщения: 22552
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1571
Заслуга: Developer
Медальки:

Re: MyGUI

Сообщение Nick » 09 дек 2012, 23:43

Некоторые сообщения из этой темы были отделены в новую: LinuxCNC реверс Gкода #1
Аватара пользователя
Nick
Мастер
 
Сообщения: 22552
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1571
Заслуга: Developer
Медальки:

Re: MyGUI

Сообщение nkp » 13 дек 2012, 23:21

к вопросу загрузки gui с последней обрабатываемой программой(g-code) ###
Код: Выделить всёРазвернуть
import ConfigParser
*********
********
   def program_open(self,widget):
      cfgfile = open('/home/nkp/.mygui_preferences','w')
      self.s.poll()
      open_p = self.s.file
      print 'open_p' ,open_p
      self.config.set("DEFAULT","open_program_df",open_p )
      self.config.write(cfgfile)
      cfgfile.close()
***************
***********
   def __init__(self):
**************
*************
      self.config = ConfigParser.ConfigParser()
      self.config.read("/home/nkp/.mygui_preferences")
      self.prog_open_default = self.config.get("DEFAULT","open_program_df" )
      print 'self.prog_open_default',self.prog_open_default
      self.c.mode(linuxcnc.MODE_AUTO)
      self.c.program_open(self.prog_open_default)
      self.c.wait_complete()

для упрощения создаем файл /home/nkp/.mygui_preferences
прописываем в нем примерно:
Код: Выделить всёРазвернуть
[DEFAULT]
open_program_df = /home/nkp/linuxcnc/nc_files/1_re_lathe.ngc

пока привязал функцию program_open к закрытию емс ,но
пока закрываю софтово - все работает
а вот будет ли срабатывать при выключении по кнопке Power - не знаю(как там все происходит)...
то есть сработает ли:
Код: Выделить всёРазвернуть
   def on_window1_destroy(self, widget, data=None):
      print "quit++"   
      gtk.main_quit()
      self.program_open(self)
nkp
Мастер
 
Сообщения: 7697
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1401
Медальки:

Re: MyGUI

Сообщение UAVpilot » 14 дек 2012, 01:14

Как-нибудь вот так:
Код: Выделить всёРазвернуть
import signal
import sys
...
def signal_handler(signal, frame):
        # тут сохраняем файлы и делаем прочую лабуду для нормального завершения проги
        sys.exit(0)

signal.signal(signal.SIGINT, signal_handler)
... перехватываем остальные сигналы

Думаю достаточно будет перехватить сигналы: SIGHUP, SIGINT, SIGQUIT, SIGUSR1, SIGUSR2, SIGTERM.
Это только идея, за синтаксис не уверен - я питон пока не разумею. :wik:
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 18489
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4530
Медальки:
Настоящее имя: Сергей

Re: MyGUI

Сообщение Nick » 14 дек 2012, 09:42

nkp писал(а):а вот будет ли срабатывать при выключении по кнопке Power - не знаю(как там все происходит)...то есть сработает ли:

Так может лучше сохранять последний открытый файл в момент его открытия, а не в момент закрытия LinuxCNC? Тогда все вопросы снимутся ;). Кстати, под это бы опцию дополнительную сделать...
О, кстати, можно вообще что-нибудь хитрое придумать, чтобы при открытии файла в папке с конфигом создавалась на него символическая ссылка last_opened.ngc, потом просто в ini можно будет указывать /home/nkp/linuxcnc/.../last_opened.ngc. Или ты это и имел в виду?

PS ссылка создается так os.symlink(source, link_name)
Аватара пользователя
Nick
Мастер
 
Сообщения: 22552
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1571
Заслуга: Developer
Медальки:

Re: MyGUI

Сообщение nkp » 14 дек 2012, 11:07

Nick писал(а):сохранять последний открытый файл в момент его открытия, а не в момент закрытия

да - так в сначала и сделал...
но потом функцию открытия файла использовал из готового модуля hal_filechooser.py
вот сейчас думаю именно в этот модуль внести изменения - чтоб при загрузке там отрабатывала наша функция записи в .mygui_preferences
------
не знаю как в работе удобно(наверно каждому по своему)
но имхо нужны только 2 "режима" :
1.загрузка емс без программы(хотя тоже сомнительно что в этом возникнет необходимость)
2.загрузка емс с последней обр. программой
опционно устанавливать режим п.2 тоже не имеет большого смысла - так как если тебе сегодня не нужна при старте вчерашняя программа -
то значит нужна другая,и чтоб ее загрузить - все равно проделываем те же телодвижения ,что в случае пустого экрана,что в случае
загруженой "вчерашней" проги
мне кажется не стоит что то делать - чтоб оператору потом приходилось лезть в ини (или любые другие) конфиги
--------------
а вообще .mygui_preferences я думаю еще пригодится для сохранения и других настроек юзера
nkp
Мастер
 
Сообщения: 7697
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1401
Медальки:

Re: MyGUI

Сообщение Lexxa » 18 дек 2012, 23:46

вот еще картинки софткеев с hh
Вложения
bmx.tar.gz
(178.72 Кб) Скачиваний: 600
Комната залита кровью, я занимаюсь любовью!
Аватара пользователя
Lexxa
Мастер
 
Сообщения: 2575
Зарегистрирован: 16 дек 2011, 16:48
Откуда: ryazan
Репутация: 298
Медальки:
Настоящее имя: Алексей

Re: MyGUI

Сообщение nkp » 25 дек 2012, 01:22

к mygui планирую прикрутить мастера
тут пробовал разные концепции
сперва начал было делать на отдельных вкладках notebook
понял - что и скрипт будет раздут и xml тоже непомерно велик (ну если для фрезерного)
решил делать каждый отдельно
MyGUI Выделение(009).jpg

(это "черновик" для обкатки кода)
а вот по нему (коду) как раз и вопрос!!
схему работы мастера я уже описывал:
из работающего емс открываем мастер
он отрабатывает - закрывается - выводит в стандартный вывод О-код - его загружает должен бы загрузить емс - но
делает это как то частично.
Для завершения всегда нужно жать кнопку "Перезагрузить"
все зарыто вот здесь:
Код: Выделить всёРазвернуть
#!/usr/bin/env python
# vim: sts=4 sw=4 et
# GladeVcp FileChooser related widgets
#
# Copyright (c) 2010  Pavel Shramov <shramov@mexmat.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

import os, sys, time, select, re
import tempfile, atexit, shutil

import gtk, gobject

from hal_widgets import _HalWidgetBase
import linuxcnc
from hal_glib import GStat

_ = lambda x: x

from hal_actions import _EMC_ActionBase, _EMC_Action

progress_re = re.compile("^FILTER_PROGRESS=(\\d*)$")
class FilterProgram:
    def __init__(self, program_filter, infilename, outfilename, callback=None):
        import subprocess
        outfile = open(outfilename, "w")
        infilename_q = infilename.replace("'", "'\\''")
        env = dict(os.environ)
        env['AXIS_PROGRESS_BAR'] = '1'
        p = subprocess.Popen(["sh", "-c", "%s '%s'" % (program_filter, infilename_q)],
                              stdin=subprocess.PIPE,
                              stdout=outfile,
                              stderr=subprocess.PIPE,
                              env=env)
        p.stdin.close()  # No input for you
        self.p = p
        self.stderr_text = []
        self.program_filter = program_filter
        self.callback = callback
        gobject.timeout_add(100, self.update)
        #progress = Progress(1, 100)
        #progress.set_text(_("Filtering..."))

    def update(self):
        if self.p.poll() is not None:
            self.finish()
            return False

        r,w,x = select.select([self.p.stderr], [], [], 0)
        if not r:
            return True
        stderr_line = self.p.stderr.readline()
        m = progress_re.match(stderr_line)
        if m:
            pass #progress.update(int(m.group(1)), 1)
        else:
            self.stderr_text.append(stderr_line)
            sys.stderr.write(stderr_line)
        return True

    def finish(self):
        # .. might be something left on stderr
        for line in self.p.stderr:
            m = progress_re.match(line)
            if not m:
                self.stderr_text.append(line)
                sys.stderr.write(line)
        r = self.p.returncode
        if r:
            self.error(r, "".join(self.stderr_text))
        if self.callback:
            self.callback(r)

    def error(self, exitcode, stderr):
        dialog = gtk.MessageDialog(None, 0, gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE,
                _("The program %(program)r exited with code %(code)d.  "
                "Any error messages it produced are shown below:")
                    % {'program': self.program_filter, 'code': exitcode})
        dialog.format_secondary_text(stderr)
        dialog.run()
        dialog.destroy()

class _EMC_FileChooser(_EMC_ActionBase):
    def _hal_init(self):
        _EMC_ActionBase._hal_init(self)
        self.ini = None
        self.tmp = None
        self.load_filters()

    def mktemp(self):
        if self.tmp:
            return
        self.tmp = tempfile.mkdtemp(prefix='emcflt-', suffix='.d')
        atexit.register(lambda: shutil.rmtree(self.tmp))

    def load_file(self, filename):
        flt = self.get_filter_program(filename)
        if not flt:
            return self._load_file(filename)

        if not self.tmp:
            self.mktemp()

        tmp = os.path.join(self.tmp, os.path.basename(filename))
        flt = FilterProgram(flt, filename, tmp, lambda r: r or self._load_file(tmp))

    def _load_file(self, filename):
        if filename:
            self.linuxcnc.mode(linuxcnc.MODE_AUTO)
            old = self.gstat.stat.file
            self.linuxcnc.program_open(filename)
            if old == filename:
                self.gstat.emit('file-loaded', filename)

    def load_filters(self, inifile=None):
        inifile = inifile or os.environ.get('INI_FILE_NAME', '/dev/null')
        self.ini = linuxcnc.ini(inifile)

        self._load_filters(self.ini)

    def get_filter_program(self, filename):
        ext = os.path.splitext(filename)[1]
        if ext:
            return self.ini.find("FILTER", ext[1:])
        else:
            return None

    def _load_filters(self, inifile):
        def _e2p(n, el):
            #print "New filter %s: %s" % (n, el)
            p = gtk.FileFilter()
            p.set_name(n)
            map(lambda s: p.add_pattern('*' + s), el)
            #print p
            return p
        all_extensions = [".ngc"]
        extensions = inifile.findall("FILTER", "PROGRAM_EXTENSION")
        extensions = [e.split(None, 1) for e in extensions]
        extensions = tuple([(v, tuple(k.split(","))) for k, v in extensions])
        map(lambda t: all_extensions.extend(t[1]), extensions)
        self.add_filter(_e2p("All machinable files", all_extensions))
        self.add_filter(_e2p("rs274ngc files", ['.ngc']))
        for n,e in extensions:
            self.add_filter(_e2p(n, e))
        self.add_filter(_e2p("All files", ['']))

class EMC_FileChooserDialog(gtk.FileChooserDialog, _EMC_FileChooser):
    __gtype_name__ = 'EMC_FileChooserDialog'
    def __init__(self, *a, **kw):
        gtk.FileChooserDialog.__init__(self, *a, **kw)
        _EMC_FileChooser._hal_init(self)
        self.connect('response', self.on_response)

    def on_response(self, w, response):
        pass
        #print ">>>", w, response

class EMC_FileChooserButton(gtk.FileChooserButton, _EMC_FileChooser):
    __gtype_name__ = 'EMC_FileChooserButton'
    def __init__(self, *a, **kw):
        gtk.FileChooserButton.__init__(self, gtk.FileChooserDialog())

        self.connect('file-set', self.on_file_set)

    def on_file_set(self, w):
        self.load_file(w.get_filename())

class EMC_Action_Open(_EMC_Action, _EMC_FileChooser):
    __gtype_name__ = 'EMC_Action_Open'
    fixed_file = gobject.property(type=str, default='', nick='Fixed file name')

    def _hal_init(self):
        _EMC_FileChooser._hal_init(self)
        _EMC_Action._hal_init(self)
        self.currentfolder = os.path.expanduser("~/linuxcnc/nc_files")

    def _load_filters(self, ini): pass

    def on_activate(self, w):
        if self.fixed_file:
            self.load_file(self.fixed_file)
            return
        dialog = EMC_FileChooserDialog(title="Open File",action=gtk.FILE_CHOOSER_ACTION_OPEN,
                buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK))
        dialog.set_current_folder(self.currentfolder)
        dialog.show()
        r = dialog.run()
        fn = dialog.get_filename()
        dialog.hide()
        if r == gtk.RESPONSE_OK:
            dialog.load_file(fn)
            self.currentfolder = os.path.dirname(fn)
        dialog.destroy()

class EMC_Action_Reload(_EMC_Action, _EMC_FileChooser):
    __gtype_name__ = 'EMC_Action_Reload'
    def _hal_init(self):
        _EMC_Action._hal_init(self)

    def on_activate(self, w):
        self._load_file(self.gstat.stat.file)

вот перезагрузка файла:
Код: Выделить всёРазвернуть
class EMC_Action_Reload(_EMC_Action, _EMC_FileChooser):
    __gtype_name__ = 'EMC_Action_Reload'
    def _hal_init(self):
        _EMC_Action._hal_init(self)

    def on_activate(self, w):
        self._load_file(self.gstat.stat.file)

но в ней всего лишь вызывается self._load_file то есть функция загрузки выбранного файла
но вот первый раз она не отрабатывает до конца
а "второй" - отрабатывает
никак её не побеДю ;)
nkp
Мастер
 
Сообщения: 7697
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1401
Медальки:

Re: MyGUI

Сообщение Nick » 25 дек 2012, 09:46

хмм... а чем тебе не нравится подход ngcgui?
Может просто его доделать, например, добавит дерево применения фильтров. Расширить возможности по манипулированию различными параметрами, последовательностью. Чтобы было как на видео, только разве что без визуализации:
Также можно сделать авто апдейт превью раз в n секунд, чтобы все было еще более интерактивным.


Главное сделать базу для разработки мастеров, с простым и открытым интерфейсом.

по вопросу: :)
Т.е. нажимаешь открыть и первый раз не работает, а при повторном нажатии работает?
Как ты вызываешь загрузку?
Аватара пользователя
Nick
Мастер
 
Сообщения: 22552
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1571
Заслуга: Developer
Медальки:

Пред.След.

Вернуться в LinuxCNC

Кто сейчас на конференции

Зарегистрированные пользователи: Bing [Bot], Darxton, Enot_1, Gestap, Google [Bot], Lexxa, lkbyysq, Majestic-12 [Bot], Mamont, Mikhgen, mycnc, Raptirius, SeReGa Sh, serge.1976, shalek, sivolap36, Yandex [bot], Дмитро, ДНК

Reputation System ©'