Код: Выделить всё
#!/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()