2017-11-07 27 views
1

현재이 페이지의 튜토리얼에서 주어진 예제를 수정하려고합니다. 아래와 같이 GUI를 생성합니다. (자습서의 두 번째 페이지에서 직접 예제를 다운로드 할 수 있습니다). 빛의 빔의 특성을주는 튜토리얼의 마지막 페이지에 유사한 GUI가 열립니다 wxPython을하고 Comtypes 파이썬 2.7이 코드를 실행wxpython dataray 인터페이스 카메라

Tutorial

.

import wx 
import wx.lib.activex 
import csv 
import comtypes.client 

class EventSink(object): 

    def __init__(self, frame): 
     self.counter = 0 
     self.frame = frame 

    def DataReady(self): 
     self.counter +=1 
     self.frame.Title= "DataReady fired {0} times".format(self.counter) 


class MyApp(wx.App): 

    def OnClick(self,e): 
     rb_selection = self.rb.GetStringSelection() 
     if rb_selection == "WinCam": 
      data = self.gd.ctrl.GetWinCamDataAsVariant() 
      data = [[x] for x in data] 
     else: 
      p_selection = self.cb.GetStringSelection() 
      if p_selection == "Profile_X": 
       data = self.px.ctrl.GetProfileDataAsVariant() 
       data = [[x] for x in data]#csv.writerows accepts a list of rows where each row is a list, a list of lists 
      elif p_selection == "Profile_Y": 
       data = self.py.ctrl.GetProfileDataAsVariant() 
       data = [[x] for x in data] 
      else: 
       datax = self.px.ctrl.GetProfileDataAsVariant() 
       datay = self.py.ctrl.GetProfileDataAsVariant() 
       data = [list(row) for row in zip(datax,datay)]#Makes a list of lists; X1 with Y1 in a list, X2 with Y2 in a list etc... 
     filename = self.ti.Value 
     with open(filename, 'wb') as fp: 
      w = csv.writer(fp, delimiter=',') 
      w.writerows(data) 

    def __init__(self, redirect=False, filename=None): 
     wx.App.__init__(self, redirect, filename) 
     self.frame = wx.Frame(parent=None, id=wx.ID_ANY,size=(760,500), title='Python Interface to DataRay') 
     #Panel 
     p = wx.Panel(self.frame, wx.ID_ANY) 
     #Get Data 
     self.gd = wx.lib.activex.ActiveXCtrl(p, 'DATARAYOCX.GetDataCtrl.1') 
     #The methods of the object are available through the ctrl property of the item 
     self.gd.ctrl.StartDriver() 
     self.counter = 0 
     sink = EventSink(self.frame) 
     self.sink = comtypes.client.GetEvents(self.gd.ctrl, sink) 
     #Button Panel 
     bp = wx.Panel(parent=self.frame, id=wx.ID_ANY, size=(215, 250)) 
     b1 = wx.lib.activex.ActiveXCtrl(parent=bp,size=(200,50), pos=(7, 0),axID='DATARAYOCX.ButtonCtrl.1') 
     b1.ctrl.ButtonID =297 #Id's for some ActiveX controls must be set 
     b2 = wx.lib.activex.ActiveXCtrl(parent=bp,size=(100,25), pos=(5, 55),axID='DATARAYOCX.ButtonCtrl.1') 
     b2.ctrl.ButtonID =171 
     b3 = wx.lib.activex.ActiveXCtrl(parent=bp,size=(100,25), pos=(110,55),axID='DATARAYOCX.ButtonCtrl.1') 
     b3.ctrl.ButtonID =172 
     b4 = wx.lib.activex.ActiveXCtrl(parent=bp,size=(100,25), pos=(5, 85),axID='DATARAYOCX.ButtonCtrl.1') 
     b4.ctrl.ButtonID =177 
     b4 = wx.lib.activex.ActiveXCtrl(parent=bp,size=(100,25), pos=(110, 85),axID='DATARAYOCX.ButtonCtrl.1') 
     b4.ctrl.ButtonID =179 
     #Custom controls 
     t = wx.StaticText(bp, label="File:", pos=(5, 115)) 
     self.ti = wx.TextCtrl(bp, value="C:\Users\Public\Documents\output.csv", pos=(30, 115), size=(170, -1)) 
     self.rb = wx.RadioBox(bp, label="Data:", pos=(5, 140), choices=["Profile", "WinCam"]) 
     self.cb = wx.ComboBox(bp, pos=(5,200), choices=[ "Profile_X", "Profile_Y", "Both"]) 
     self.cb.SetSelection(0) 
     myb = wx.Button(bp, label="Write", pos=(5,225)) 
     myb.Bind(wx.EVT_BUTTON, self.OnClick) 
     #Pictures 
     pic = wx.lib.activex.ActiveXCtrl(parent=self.frame,size=(250,250),axID='DATARAYOCX.CCDimageCtrl.1') 
     tpic = wx.lib.activex.ActiveXCtrl(parent=self.frame,size=(250,250), axID='DATARAYOCX.ThreeDviewCtrl.1') 
     palette = wx.lib.activex.ActiveXCtrl(parent=self.frame,size=(10,250), axID='DATARAYOCX.PaletteBarCtrl.1') 
     #Profiles 
     self.px = wx.lib.activex.ActiveXCtrl(parent=self.frame,size=(300,200),axID='DATARAYOCX.ProfilesCtrl.1') 
     self.px.ctrl.ProfileID=22 
     self.py = wx.lib.activex.ActiveXCtrl(parent=self.frame,size=(300,200),axID='DATARAYOCX.ProfilesCtrl.1') 
     self.py.ctrl.ProfileID = 23 
     #Formatting 
     row1 = wx.BoxSizer(wx.HORIZONTAL) 
     row1.Add(item=bp,flag=wx.RIGHT, border=10) 
     row1.Add(pic) 
     row1.Add(item=tpic, flag=wx.LEFT, border=10) 
     row2 = wx.BoxSizer(wx.HORIZONTAL) 
     row2.Add(self.px, 0, wx.RIGHT, 100)# Arguments: item, proportion, flags, border 
     row2.Add(self.py) 
     col1 = wx.BoxSizer(wx.VERTICAL) 
     col1.Add(item=row1, flag=wx.BOTTOM, border=10) 
     col1.Add(item=row2, flag=wx.ALIGN_CENTER_HORIZONTAL) 
     self.frame.SetSizer(col1) 
     self.frame.Show() 

if __name__ == "__main__": 
    app = MyApp() 
    app.MainLoop() 

기본적으로, 내 목표는 버튼에서 데이터를 추출하여 하나의 파일로 작성하거나 목록으로 컴파일하는 것입니다,하지만 난 그 데이터에 액세스하는 데 사용하는 명령을 무엇인지 전혀 모른다.

대부분의 사람들은 내가 사용하고있는 하드웨어에 액세스 할 수 없다는 것을 알고 있지만, 제 질문은 버튼이있는 wxPython 컨트롤과 해당 데이터를 가져 오는 방법에 더 중점을 둡니다.

도움이된다면 다음은 카메라로 OCX 컨트롤에 대한 문서입니다. 내가 대답 할 수있는 질문이있을 경우

DataRay OCX Documentation

은 알려주세요. 시간과 도움을 미리 보내 주셔서 감사합니다.

답변

0

docs에 따르면 콘텐츠와 함께 double 값을 반환해야합니다. 버튼 b1에 대해서는 b1.ctrl.GetParameter()입니다.

물론 버튼 개체를 저장해야합니다. MyApp 개체에서

+0

조언 해 주셔서 감사합니다. GetParameter() 메서드를 사용하면 실제로 도움이됩니다. 나는 너의 두번째 그러나 조금에 분실된다. MyApp 클래스가 객체와 다른가? 그렇지 않은 경우 MyApp 개체는 무엇이며 해당 개체와 함께 단추를 이동하려면 어떻게해야합니까? – Jgold247

+0

@ Jgold247 버튼 객체를'self.b1'과 같은 것으로 할당하는 것으로 충분합니다. 그래서 그들은'self.b1'와 같은 방식으로 클래스의 다른 메소드에서 사용될 수 있습니다. 클래스 및 객체에 대한 자세한 내용은 https://docs.python.org/3/tutorial/classes.html을 참조하십시오. –