현재이 페이지의 튜토리얼에서 주어진 예제를 수정하려고합니다. 아래와 같이 GUI를 생성합니다. (자습서의 두 번째 페이지에서 직접 예제를 다운로드 할 수 있습니다). 빛의 빔의 특성을주는 튜토리얼의 마지막 페이지에 유사한 GUI가 열립니다 wxPython을하고 Comtypes 파이썬 2.7이 코드를 실행wxpython dataray 인터페이스 카메라
.
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 컨트롤에 대한 문서입니다. 내가 대답 할 수있는 질문이있을 경우
은 알려주세요. 시간과 도움을 미리 보내 주셔서 감사합니다.
조언 해 주셔서 감사합니다. GetParameter() 메서드를 사용하면 실제로 도움이됩니다. 나는 너의 두번째 그러나 조금에 분실된다. MyApp 클래스가 객체와 다른가? 그렇지 않은 경우 MyApp 개체는 무엇이며 해당 개체와 함께 단추를 이동하려면 어떻게해야합니까? – Jgold247
@ Jgold247 버튼 객체를'self.b1'과 같은 것으로 할당하는 것으로 충분합니다. 그래서 그들은'self.b1'와 같은 방식으로 클래스의 다른 메소드에서 사용될 수 있습니다. 클래스 및 객체에 대한 자세한 내용은 https://docs.python.org/3/tutorial/classes.html을 참조하십시오. –