Python в LinuxCnC

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python в LinuxCnC

Сообщение Nick »

nkp писал(а):self.subm=gladevcp.hal_mdihistory .EMC_MDIHistory()
Тут пробел лишний.
nkp писал(а):print 'cmd'
А cmd печатает, или тупо вообще всю функцию не выполняет?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Python в LinuxCnC

Сообщение nkp »

Nick писал(а):А cmd печатает, или тупо вообще всю функцию не выполняет?
функцию submit он выполняет
если делаем так:

Код: Выделить всё

    def submit(self, *a):

        print 'cmd1',self.entry
        cmd = self.entry.get_text()
        if not cmd:
            print 'cmdnot'
            return
        ensure_mode(self.stat, self.linuxcnc, linuxcnc.MODE_MDI)
то после вызова получаем:
Выделение(006).jpg (2984 просмотра) <a class='original' href='./download/file.php?id=10234&mode=view' target=_blank>Загрузить оригинал (18.29 КБ)</a>
то есть функция выполняется- но cmd не задается
имхо она не выдит текста в entry
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Python в LinuxCnC

Сообщение Impartial »

nkp писал(а):Надо двигаться в этом направлении .(и сразу вопрос-где в исходниках найти модуль "gcode" ?-мои поиски не дали результ)
G код это стандарт RS274.
Исходники в катологе \src\emc\rs274ngc
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Python в LinuxCnC

Сообщение nkp »

Impartial,
спасибо
---------------
nkp писал(а): функция выполняется- но cmd не задается
дело скорей всего в аргументах этой функции
как правильно их прописать??
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python в LinuxCnC

Сообщение Nick »

А что будет если дописать print cmd
после cmd = self.entry.get_text()
Что там в переменной на самом деле?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Python в LinuxCnC

Сообщение nkp »

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

Re: Python в LinuxCnC

Сообщение Nick »

Так, а кто такой self.entry, и точно ли в нем что-то написано?
попробуй в процедуру запуска MDI yнаписать print и то, что там в entry, и потом сравнить id.
Кстати, в процедуре, которая выполняет MDI self может быть другим!

Откуда ты этот код взял?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Python в LinuxCnC

Сообщение nkp »

Nick писал(а):Так, а кто такой self.entry, и точно ли в нем что-то написано?
self.entry - это поле ввода команд MDI элемента gladevcp :
Выделение(007).jpg (2950 просмотров) <a class='original' href='./download/file.php?id=10244&mode=view' target=_blank>Загрузить оригинал (26.06 КБ)</a>
код взял из папки /lib/pythongladevcp :
hal_mdihistory.py (для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

#!/usr/bin/env python
# vim: sts=4 sw=4 et
# GladeVcp MDI history widget
#
# Copyright (c) 2011  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, time, string

import gobject, gtk

from hal_widgets import _HalWidgetBase
import linuxcnc
from hal_glib import GStat
from hal_actions import _EMC_ActionBase, ensure_mode

class EMC_MDIHistory(gtk.VBox, _EMC_ActionBase):
    __gtype_name__ = 'EMC_MDIHistory'
    def __init__(self, *a, **kw):
        gtk.VBox.__init__(self, *a, **kw)
        inifile = os.environ.get('INI_FILE_NAME', '/dev/null')
        self.ini = linuxcnc.ini(inifile)

        path = self.ini.find('DISPLAY', 'MDI_HISTORY_FILE') or '~/.axis_mdi_history'
        self.filename = os.path.expanduser(path)

        self.model = gtk.ListStore(str)

        self.tv = gtk.TreeView()
        self.tv.set_model(self.model)
        self.cell = gtk.CellRendererText()

        self.col = gtk.TreeViewColumn("Command")
        self.col.pack_start(self.cell, True)
        self.col.add_attribute(self.cell, 'text', 0)

        self.tv.append_column(self.col)
        self.tv.set_search_column(0)
        self.tv.set_reorderable(False)
        self.tv.set_headers_visible(True)

        scroll = gtk.ScrolledWindow()
        scroll.add(self.tv)
        scroll.props.hscrollbar_policy = gtk.POLICY_AUTOMATIC
        scroll.props.vscrollbar_policy = gtk.POLICY_AUTOMATIC

        self.entry = gtk.Entry()
        self.entry.set_icon_from_stock(gtk.POS_RIGHT, 'gtk-ok')

        self.entry.connect('activate', self.submit)
        self.entry.connect('icon-press', self.submit)
        self.tv.connect('cursor-changed', self.select)

        self.pack_start(scroll, True)
        self.pack_start(self.entry, False)

        self.reload()
        self.show_all()

    def reload(self):
        self.model.clear()

        try:
            fp = open(self.filename)
        except:
            return
        lines = map(str.strip, fp.readlines())
        fp.close()

        lines = list(reversed(list(set(reversed(lines)))))
        lines = filter(bool, lines)
        for l in lines:
            self.model.append((l,))
        path = (len(lines)-1,)
        self.tv.scroll_to_cell(path)
        self.tv.set_cursor(path)
        self.entry.set_text('')
        print 'reload'
    def submit(self, *a):

        print 'cmd1',self.entry,
        cmd = self.entry.get_text()
        print cmd, 'cmd'
        if not cmd:
            print 'cmdnot'
            return
        ensure_mode(self.stat, self.linuxcnc, linuxcnc.MODE_MDI)

        try:
            fp = open(self.filename, 'a')
            fp.write(cmd + "\n")
            fp.close()
        except:
            pass

        self.linuxcnc.mdi(cmd)
        last = self.model.append((cmd,))
        path = self.model.get_path(last)
        self.tv.scroll_to_cell(path)
        self.tv.set_cursor(path)

    def select(self, w):
        idx = w.get_cursor()[0]
        if idx is None:
            return
        self.entry.set_text(self.model[idx][0])
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python в LinuxCnC

Сообщение Nick »

О, а как ты создаешь окно MDI history?
Просто вот это не отображает виджет:
self.subm=gladevcp.hal_mdihistory .EMC_MDIHistory()
self.widgets.button5.connect("clicked", self.mdi_start)
оно создает виджет, но никуда его не отображает, надо бы ему еще переслать gtk.VBox, _EMC_ActionBase, как в
class EMC_MDIHistory(gtk.VBox, _EMC_ActionBase):


--------------
upd:

не знаю, что такое _EMC_ActionBase, но хотябы контейнер gtk.VBox ему надо...
хотя... похоже это не сам контейнер, а класс VBox, и по идее этот EMC_MDIHistory должен стать потомком VBox, т.е. его можно как любой другой виджет запаковать в нужный контейнер...
жесть :hehehe:
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Python в LinuxCnC

Сообщение nkp »

Nick писал(а):О, а как ты создаешь окно MDI history?
не понял....
я его не создаю - psha наверно все сделал (ну или принимал активное участие):
Выделение(008).jpg (2944 просмотра) <a class='original' href='./download/file.php?id=10245&mode=view' target=_blank>Загрузить оригинал (75.71 КБ)</a>
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python в LinuxCnC

Сообщение Nick »

Вот! Вот в чем засада!!!
Когда ты вызываешь:
self.subm=gladevcp.hal_mdihistory.EMC_MDIHistory()
то создается объект(виджет) класса EMC_MDIHistory, который является потомком класса VBox. И все, у тебя в переменной self.subm есть этот объект.
Потом когда ты добавляешь такой-же объект в GladeVCP, сам gladeVCP генерирует _другой_ объект класса EMC_MDIHistory и сам пакует его в указанное место.
В итоге есть два объекта, один твой self.subm, который никуда не включен, другой от gladevcp. Причем оба выполняют одну и туже функцию self.submit() но с разными параметрами.

Что надо сделать:
После
self.subm=gladevcp.hal_mdihistory.EMC_MDIHistory()
надо self.subm куда-нибудь запаковать, например, если у тебя на форме есть self.hbox:
self.hbox(self.subm, True)
А в gladevcp не надо ничего делать.

Либо надо найти ссылку на EMC_MDIHistory созданный в gladeVCP, для этого была какая-та функция в builder... сейчас точно не помню... скинь весь код, с загрузкой gladevcp, тогда скажу, что именно.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python в LinuxCnC

Сообщение Nick »

Для поиска того виджета от gladevcp надо воспользоваться чем-то вроде:
Note that regardless whether you’re using the libglade or the new GtkBuilder format for your Glade UI, widgets can always be referred to as builder.get_object(<widgetname>). Also, the complete list of widgets is available as builder.get_objects() regardless of UI format.
а этот builder мы берем из: .... хммм .... а как подгружается gladevcp? :)
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Python в LinuxCnC

Сообщение nkp »

Nick писал(а):скинь весь код, с загрузкой gladevcp, тогда скажу, что именно.
(для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

#!/usr/bin/python
# -*- coding: utf-8 -*-

import pygtk
pygtk.require("2.0")
import gtk
import time
import gladevcp.makepins
from gladevcp.gladebuilder import GladeBuilder
import hal
import linuxcnc
import hal_glib
import sys
import gladevcp
import os
import ConfigParser
import gladevcp.hal_mdihistory 
#from gscreen import preferences
BASE = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), ".."))
datadir = os.path.join(BASE, "share", "linuxcnc")
xmlname = os.path.join(datadir,"mygui.glade")
CONFIGPATH = os.environ['CONFIG_DIR']
inifile = linuxcnc.ini(sys.argv[2])
 
print  sys.argv[1]
print  sys.argv[2]
print  os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), " "))
class Setpoint:
    def __init__(self):
        self.d=("P","X","Y","Z","Z2")

class Widgets:
	def __init__(self, xml):
		self._xml = xml
	def __getattr__(self, attr):
		r = self._xml.get_object(attr)
		if r is None: raise AttributeError, "No widget %r" % attr
		return r
	def __getitem__(self, attr):
		r = self._xml.get_object(attr)
		if r is None: raise IndexError, "No widget %r" % attr
		return r

class Mygui(object):


	def open_m(self,widget):
		f=open('/home/nkp/emc2/nc_files/1_re_lathe.ngc', "r")
	        lines = f.readlines()
	        sys.stdout.write(str(lines))
	def home_all(self,widget):
		self.c.mode(linuxcnc.MODE_MANUAL)
		self.c.home(0)
		self.c.home(1)
		self.c.home(2)
#		self.c.load_tool_table()
#		self.c.set_feed_hold(1)
	def WriteToAxis(self,widget):
		sys.stdout.write()
	
	def on_window1_destroy(self, widget, data=None):
		print "quit++"	
		gtk.main_quit()
		self.program_open(self)
	def page_select(self,widget):
		maxpage = self.widgets.notebook.get_n_pages()
		page = self.widgets.notebook.get_current_page()
		nextpage = page + 1
		if nextpage == maxpage:
			nextpage = 0
		self.widgets.notebook.set_current_page(nextpage)		
	def on_halmeter(self,*args):
		p = os.popen("halmeter &")
	def fullscreen(self,*args):
		self.window.unfullscreen()
		
	def enable_dro(self,*args):
#		self.widgets.gremlin.set_property('enable_dro',(1))
#		self.widgets.gremlin.set_mouse_start(0,0)
		self.rotate(180,0)
	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 change_viev(self,*args):	 
		def whirligig():
			self.setpoint.d = self.setpoint.d[-1:]+self.setpoint.d[:-1]
		whirligig()
		self.widgets.gremlin.set_property('view',self.setpoint.d[0])
	def pan(self,x,z):
		self.widgets.gremlin.pan(x,z)
                self.widgets.gremlin.set_mouse_start(0,0)
	def rotate(self,x,y):
		self.widgets.gremlin.rotate_view(x,y)
                self.widgets.gremlin.set_mouse_start(0,0)
        def on_halshow(self,*args):
                p = os.popen("/home/nkp/emc2-dev-80db2a2/tcl/bin/halshow.tcl &" )
	def change_mode(self, pin) :
		print '1'
		for i in self.modes :
			if self.halcomp[i] == True :
				self.mode = self.modes[i]
				self.widgets.notebook1.set_current_page(self.mode)
                                self.widgets.notebook2.set_current_page(self.mode)
#				self.widgets.notebook.set_current_page(self.mode)
				self.widgets.label19.get_text(self.mode)
				self.change_page()
#				self.widgets.label9.set_text(str(self.modes.get(self.mode)))
				self.widgets.label9.set_text(str(self.mode))
				return
	def click_button(self, pin, notebook, num) :
		
		if pin.value == True :
			box = self.widgets.notebook1.get_nth_page(self.widgets.notebook1.get_current_page())
			button_list = box.get_children()
			button = button_list[num]
			button.emit("clicked")
        def mode_auto(self,widget):
		self.c.mode(linuxcnc.MODE_AUTO)
        def mdi_start(self,widget):
		self.subm.submit()
        	print 'mdi_start'	
	def __init__(self):
		global xmlname
		localglade = os.path.join(CONFIGPATH,"mygui.glade")
		if os.path.exists(localglade):
			print " MyGUI INFO:  Загружаем файл glade %s "% localglade
			xmlname = localglade
		else:
			print " MyGUI INFO:  Загружаем файл glade %s " % xmlname

		self.builder = gtk.Builder()
		self.builder.add_from_file(xmlname)
		self.window = self.builder.get_object("window1")
		self.widgets = Widgets(self.builder)
		self.halcomp = hal.component("mygui")
		self.halcomp.newpin("program-line", hal.HAL_FLOAT, hal.HAL_IN)
		self.pl=self.halcomp["program-line"]
		self.vtriggers = []
		self.htriggers = []
		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("value-changed",self.click_button, self.widgets.notebook2, i)
		for i in range(8) :
			self.htriggers.append(hal_glib.GPin(self.halcomp.newpin('hbutton.%s'%i, hal.HAL_BIT, hal.HAL_IN)))
			self.htriggers[-1].connect("value-changed",self.click_button, self.widgets.notebook1, i)

		self.modes = {"mode_auto":0, "mode_referent":1, "mode_mdi":2, "mode_jogu":3, "mode_jogi":4, "mode_edit":5,"mode_mpg":6,}
		self.modetriggers = []
		for mode in self.modes :
			self.modetriggers.append(hal_glib.GPin(self.halcomp.newpin(mode, hal.HAL_BIT, hal.HAL_IN)))			
			self.modetriggers[-1].connect("value-changed", self.change_mode)
		panel = gladevcp.makepins.GladePanel( self.halcomp, xmlname, self.builder, None)
		self.builder.connect_signals(self)
		self.halcomp.ready()
		self.setpoint = Setpoint()
#		self.d=("P","X","Y","Z","Z2")
#               self.widgets.gremlin.set_property('view',self.setpoint.d[0])
#		g=self.widgets.gremlin.get_view()
#		print g, "G"
#		self.widgets.gremlin.set_property('metric_units',True)
#		self.widgets.notebook1.set_current_page(3)
#		self.window.fullscreen()
#		self.widgets.gremlin.set_property('enable_dro',(0))
		self.widgets.gremlin.set_property('show_velocity',(0))
		self.widgets.gremlin.set_property('show_rapids',(1))
#		self.widgets.button53.modify_bg(gtk.STATE_NORMAL , gtk.gdk.Color('#FF0095'))
		self.c = linuxcnc.command()
		self.s = linuxcnc.stat()
		self.s.poll()
		self.subm=gladevcp.hal_mdihistory.EMC_MDIHistory()
		self.widgets.button5.connect("clicked", self.mdi_start)
		self.widgets.button6.connect("clicked", self.program_open)
		self.widgets.gremlin.set_property('view',self.setpoint.d[2])

		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()
		self.window.show()		
				
 
if __name__ == "__main__":
	app = Mygui()
        res = os.spawnvp(os.P_WAIT, "halcmd", ["halcmd", "-f", "/home/nkp/emc2-dev-80db2a2/configs/MyGUI/mode.hal"])
        if res: raise SystemExit, res
	gtk.main()
	
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python в LinuxCnC

Сообщение Nick »

Вот он:
self.builder = gtk.Builder()
+ мое предыдущее сообщение.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Python в LinuxCnC

Сообщение nkp »

так не получается запаковать:
Выделение(009).jpg (2934 просмотра) <a class='original' href='./download/file.php?id=10246&mode=view' target=_blank>Загрузить оригинал (29.08 КБ)</a>
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python в LinuxCnC

Сообщение Nick »

Добавь целиком ошибку. и последний код заодно.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Python в LinuxCnC

Сообщение nkp »

(для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

#!/usr/bin/python
# -*- coding: utf-8 -*-

import pygtk
pygtk.require("2.0")
import gtk
import time
import gladevcp.makepins
from gladevcp.gladebuilder import GladeBuilder
import hal
import linuxcnc
import hal_glib
import sys
import gladevcp
import os
import ConfigParser
import gladevcp.hal_mdihistory 
#from gscreen import preferences
BASE = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), ".."))
datadir = os.path.join(BASE, "share", "linuxcnc")
xmlname = os.path.join(datadir,"mygui.glade")
CONFIGPATH = os.environ['CONFIG_DIR']
inifile = linuxcnc.ini(sys.argv[2])
 
print  sys.argv[1]
print  sys.argv[2]
print  os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), " "))
class Setpoint:
    def __init__(self):
        self.d=("P","X","Y","Z","Z2")

class Widgets:
	def __init__(self, xml):
		self._xml = xml
	def __getattr__(self, attr):
		r = self._xml.get_object(attr)
		if r is None: raise AttributeError, "No widget %r" % attr
		return r
	def __getitem__(self, attr):
		r = self._xml.get_object(attr)
		if r is None: raise IndexError, "No widget %r" % attr
		return r

class Mygui(object):


	def open_m(self,widget):
		f=open('/home/nkp/emc2/nc_files/1_re_lathe.ngc', "r")
	        lines = f.readlines()
	        sys.stdout.write(str(lines))
	def home_all(self,widget):
		self.c.mode(linuxcnc.MODE_MANUAL)
		self.c.home(0)
		self.c.home(1)
		self.c.home(2)
#		self.c.load_tool_table()
#		self.c.set_feed_hold(1)
	def WriteToAxis(self,widget):
		sys.stdout.write()
	
	def on_window1_destroy(self, widget, data=None):
		print "quit++"	
		gtk.main_quit()
		self.program_open(self)
	def page_select(self,widget):
		maxpage = self.widgets.notebook.get_n_pages()
		page = self.widgets.notebook.get_current_page()
		nextpage = page + 1
		if nextpage == maxpage:
			nextpage = 0
		self.widgets.notebook.set_current_page(nextpage)		
	def on_halmeter(self,*args):
		p = os.popen("halmeter &")
	def fullscreen(self,*args):
		self.window.unfullscreen()
		
	def enable_dro(self,*args):
#		self.widgets.gremlin.set_property('enable_dro',(1))
#		self.widgets.gremlin.set_mouse_start(0,0)
		self.rotate(180,0)
	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 change_viev(self,*args):	 
		def whirligig():
			self.setpoint.d = self.setpoint.d[-1:]+self.setpoint.d[:-1]
		whirligig()
		self.widgets.gremlin.set_property('view',self.setpoint.d[0])
	def pan(self,x,z):
		self.widgets.gremlin.pan(x,z)
                self.widgets.gremlin.set_mouse_start(0,0)
	def rotate(self,x,y):
		self.widgets.gremlin.rotate_view(x,y)
                self.widgets.gremlin.set_mouse_start(0,0)
        def on_halshow(self,*args):
                p = os.popen("/home/nkp/emc2-dev-80db2a2/tcl/bin/halshow.tcl &" )
	def change_mode(self, pin) :
		print '1'
		for i in self.modes :
			if self.halcomp[i] == True :
				self.mode = self.modes[i]
				self.widgets.notebook1.set_current_page(self.mode)
                                self.widgets.notebook2.set_current_page(self.mode)
#				self.widgets.notebook.set_current_page(self.mode)
				self.widgets.label19.get_text(self.mode)
				self.change_page()
#				self.widgets.label9.set_text(str(self.modes.get(self.mode)))
				self.widgets.label9.set_text(str(self.mode))
				return
	def click_button(self, pin, notebook, num) :
		
		if pin.value == True :
			box = self.widgets.notebook1.get_nth_page(self.widgets.notebook1.get_current_page())
			button_list = box.get_children()
			button = button_list[num]
			button.emit("clicked")
        def mode_auto(self,widget):
		self.c.mode(linuxcnc.MODE_AUTO)
        def mdi_start(self,widget):
		self.subm.submit()
        	print 'mdi_start'	
	def __init__(self):
		global xmlname
		localglade = os.path.join(CONFIGPATH,"mygui.glade")
		if os.path.exists(localglade):
			print " MyGUI INFO:  Загружаем файл glade %s "% localglade
			xmlname = localglade
		else:
			print " MyGUI INFO:  Загружаем файл glade %s " % xmlname

		self.builder = gtk.Builder()
		self.builder.add_from_file(xmlname)
		self.window = self.builder.get_object("window1")
		self.widgets = Widgets(self.builder)
		self.halcomp = hal.component("mygui")
		self.halcomp.newpin("program-line", hal.HAL_FLOAT, hal.HAL_IN)
		self.pl=self.halcomp["program-line"]
		self.vtriggers = []
		self.htriggers = []
		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("value-changed",self.click_button, self.widgets.notebook2, i)
		for i in range(8) :
			self.htriggers.append(hal_glib.GPin(self.halcomp.newpin('hbutton.%s'%i, hal.HAL_BIT, hal.HAL_IN)))
			self.htriggers[-1].connect("value-changed",self.click_button, self.widgets.notebook1, i)

		self.modes = {"mode_auto":0, "mode_referent":1, "mode_mdi":2, "mode_jogu":3, "mode_jogi":4, "mode_edit":5,"mode_mpg":6,}
		self.modetriggers = []
		for mode in self.modes :
			self.modetriggers.append(hal_glib.GPin(self.halcomp.newpin(mode, hal.HAL_BIT, hal.HAL_IN)))			
			self.modetriggers[-1].connect("value-changed", self.change_mode)
		panel = gladevcp.makepins.GladePanel( self.halcomp, xmlname, self.builder, None)
		self.builder.connect_signals(self)
		self.halcomp.ready()
		self.setpoint = Setpoint()
#		self.d=("P","X","Y","Z","Z2")
#               self.widgets.gremlin.set_property('view',self.setpoint.d[0])
#		g=self.widgets.gremlin.get_view()
#		print g, "G"
#		self.widgets.gremlin.set_property('metric_units',True)
#		self.widgets.notebook1.set_current_page(3)
#		self.window.fullscreen()
#		self.widgets.gremlin.set_property('enable_dro',(0))
		self.widgets.gremlin.set_property('show_velocity',(0))
		self.widgets.gremlin.set_property('show_rapids',(1))
#		self.widgets.button53.modify_bg(gtk.STATE_NORMAL , gtk.gdk.Color('#FF0095'))
		self.c = linuxcnc.command()
		self.s = linuxcnc.stat()
		self.s.poll()
		self.subm=gladevcp.hal_mdihistory.EMC_MDIHistory()
		self.widgets.vbox11(self.subm,True)
		self.widgets.button5.connect("clicked", self.mdi_start)
		self.widgets.button6.connect("clicked", self.program_open)
		self.widgets.gremlin.set_property('view',self.setpoint.d[2])

		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()
		self.window.show()		
				
 
if __name__ == "__main__":
	app = Mygui()
        res = os.spawnvp(os.P_WAIT, "halcmd", ["halcmd", "-f", "/home/nkp/emc2-dev-80db2a2/configs/MyGUI/mode.hal"])
        if res: raise SystemExit, res
	gtk.main()
	
(для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

Print file information:
RUN_IN_PLACE=yes
LINUXCNC_DIR=
LINUXCNC_BIN_DIR=/home/nkp/emc2-dev-80db2a2/bin
LINUXCNC_TCL_DIR=/home/nkp/emc2-dev-80db2a2/tcl
LINUXCNC_SCRIPT_DIR=
LINUXCNC_RTLIB_DIR=/home/nkp/emc2-dev-80db2a2/rtlib
LINUXCNC_CONFIG_DIR=
LINUXCNC_LANG_DIR=/home/nkp/emc2-dev-80db2a2/src/objects
INIVAR=inivar
HALCMD=halcmd
LINUXCNC_EMCSH=/usr/bin/wish8.5
LINUXCNC - 2.6.0~pre
Machine configuration directory is '/home/nkp/emc2-dev-80db2a2/configs/MyGUI'
Machine configuration file is 'MyGUI.ini'
INIFILE=/home/nkp/emc2-dev-80db2a2/configs/MyGUI/MyGUI.ini
PARAMETER_FILE=stepper.var
TASK=milltask
HALUI=halui
DISPLAY=mygui
Starting LinuxCNC...
Starting LinuxCNC server program: linuxcncsvr
Loading Real Time OS, RTAPI, and HAL_LIB modules
Starting LinuxCNC IO program: io
io started
halcmd loadusr io started
Starting HAL User Interface program: halui
Starting TASK program: milltask
task pid=5540
Starting DISPLAY program: mygui
emcTaskInit: using builtin interpreter
-ini
/home/nkp/emc2-dev-80db2a2/configs/MyGUI/MyGUI.ini
/home/nkp/emc2-dev-80db2a2/bin/ 
 MyGUI INFO:  Загружаем файл glade /home/nkp/emc2-dev-80db2a2/configs/MyGUI/mygui.glade 
reload
reload
Shutting down and cleaning up LinuxCNC...
Killing task linuxcncsvr, PID=5483
Killing task milltask, PID=5540
ERROR CLASSICLADDER-   Error intializing classicladder user module.
Removing HAL_LIB, RTAPI, and Real Time OS modules
Removing NML shared memory segments
Cleanup done

Debug file information:
Can not find -sec MOT -var MOT -num 1 
Can not find -sec IO -var IO -num 1 
Can not find -sec LINUXCNC -var NML_FILE -num 1 
Can not find -sec EMC -var NML_FILE -num 1 
Can not find -sec DISPLAY -var INTRO_GRAPHIC -num 1 
Can not find -sec DISPLAY -var INTRO_TIME -num 1 

** (mygui:5541): WARNING **: expected enumeration type GtkEntryIconPosition, but got GtkPositionType instead

** (mygui:5541): WARNING **: expected enumeration type GtkEntryIconPosition, but got GtkPositionType instead
Traceback (most recent call last):
  File "/home/nkp/emc2-dev-80db2a2/bin/mygui", line 192, in <module>
    app = Mygui()
  File "/home/nkp/emc2-dev-80db2a2/bin/mygui", line 176, in __init__
    self.widgets.vbox11(self.subm,True)
TypeError: 'gtk.VBox' object is not callable
5483
  PID TTY      STAT   TIME COMMAND
5540
  PID TTY      STAT   TIME COMMAND
Stopping realtime threads
Unloading hal components
ULAPI: WARNING: module 'HAL_classicladder' failed to delete shmem 03

Kernel message information:
[19448.246747] I-pipe: Domain RTAI registered.
[19448.246756] RTAI[hal]: <3.8.1> mounted over IPIPE-NOTHREADS 2.6-03.
[19448.246760] RTAI[hal]: compiled with gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) .
[19448.246845] RTAI[hal]: mounted (IPIPE-NOTHREADS, IMMEDIATE (INTERNAL IRQs DISPATCHED), ISOL_CPUS_MASK: 0).
[19448.246848] PIPELINE layers:
[19448.246853] facdbe20 9ac15d93 RTAI 200
[19448.246856] c085cb20 0 Linux 100
[19448.274721] RTAI[malloc]: global heap size = 2097152 bytes, <BSD>.
[19448.288565] RTAI[sched]: IMMEDIATE, MP, USER/KERNEL SPACE: <with RTAI OWN KTASKs>, kstacks pool size = 524288 bytes.
[19448.288574] RTAI[sched]: hard timer type/freq = APIC/12465450(Hz); default timing: periodic; linear timed lists.
[19448.288580] RTAI[sched]: Linux timer freq = 250 (Hz), TimeBase freq = 2791936000 hz.
[19448.288584] RTAI[sched]: timer setup = 999 ns, resched latency = 2944 ns.
[19448.288688] RTAI[usi]: enabled.
[19448.342251] RTAI[math]: loaded.
[19448.571430] creating ladder-state
[19448.597252] config string '0x0378'
[19450.488364] hub 1-0:1.0: unable to enumerate USB device on port 7
[19450.676385] hub 1-0:1.0: unable to enumerate USB device on port 7
[19450.864251] hub 1-0:1.0: unable to enumerate USB device on port 7
[19451.052267] hub 1-0:1.0: unable to enumerate USB device on port 7
[19451.296052] usb 1-7: new high speed USB device using ehci_hcd and address 105
[19451.404266] hub 1-0:1.0: unable to enumerate USB device on port 7
[19451.648029] usb 1-7: new high speed USB device using ehci_hcd and address 106
[19452.408626] RTAI[math]: unloaded.
[19452.436985] SCHED releases registered named ALIEN RTGLBH
[19452.468377] RTAI[malloc]: unloaded.
[19452.568025] RTAI[sched]: unloaded (forced hard/soft/hard transitions: traps 0, syscalls 0).
[19452.571515] I-pipe: Domain RTAI unregistered.
[19452.571629] RTAI[hal]: unmounted.


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

Re: Python в LinuxCnC

Сообщение Nick »

а, ну да, это... надо так:
self.widgets.vbox11.pack_start(self.subm,True)
поздно уже... туплю уже :freak:
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Python в LinuxCnC

Сообщение nkp »

а True это что?
http://www.pygtk.org/docs/pygtk/class-g ... pack-start
по моему это необязательно...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Python в LinuxCnC

Сообщение nkp »

так ошибок нет
функция submit отрабатывает - текста в поле не видит
Ответить

Вернуться в «LinuxCNC»