1
2
3
4
5
6
7
8
9
10
11
12
13
14 """Handle small target stimulus (client-side)"""
15
16 import VisionEgg
17 __version__ = VisionEgg.release_name
18 __cvs__ = '$Revision$'.split()[1]
19 __date__ = ' '.join('$Date$'.split()[1:3])
20 __author__ = 'Andrew Straw <astraw@users.sourceforge.net>'
21
22 import sys, os, math
23 import Tkinter
24 import VisionEgg.PyroApps.EPhysGUIUtils as client_utils
25
28
49
51 title = "Moving Target Experiment"
52 - def __init__(self, master=None, suppress_go_buttons=0,**kw):
53 client_utils.StimulusControlFrame.__init__(self,
54 master,
55 suppress_go_buttons,
56 TargetControlFrame.title,
57 TargetMetaParameters,
58 **kw)
59
60 param_frame = self.param_frame
61
62 pf_row = 0
63 Tkinter.Label(param_frame,text="Start X (pixels):").grid(row=pf_row,column=0,sticky=Tkinter.E)
64 self.start_x_tk_var = Tkinter.DoubleVar()
65 self.start_x_tk_var.set(self.meta_params.start_x)
66 self.make_callback_entry(textvariable=self.start_x_tk_var).grid(row=pf_row,column=2)
67 self.loopable_variables["Start X"] = ("start_x",self.start_x_tk_var)
68
69 pf_row += 1
70 Tkinter.Label(param_frame,text="Start Y (pixels):").grid(row=pf_row,column=0,sticky=Tkinter.E)
71 self.start_y_tk_var = Tkinter.DoubleVar()
72 self.start_y_tk_var.set(self.meta_params.start_y)
73 self.make_callback_entry(textvariable=self.start_y_tk_var).grid(row=pf_row,column=2)
74 self.loopable_variables["Start Y"] = ("start_y",self.start_y_tk_var)
75
76 pf_row += 1
77 Tkinter.Label(param_frame,text="Velocity (pixels/sec):").grid(row=pf_row,column=0,sticky=Tkinter.E)
78 self.velocity_tk_var = Tkinter.DoubleVar()
79 self.velocity_tk_var.set(self.meta_params.velocity_pps)
80 self.make_callback_entry(textvariable=self.velocity_tk_var).grid(row=pf_row,column=2)
81 self.loopable_variables["Velocity"] = ("velocity_pps",self.velocity_tk_var)
82
83 pf_row += 1
84 Tkinter.Label(param_frame,text="Direction (degrees):").grid(row=pf_row,column=0,sticky=Tkinter.E)
85 self.direction_tk_var = Tkinter.DoubleVar()
86 self.direction_tk_var.set(self.meta_params.direction_deg)
87 self.make_callback_entry(textvariable=self.direction_tk_var).grid(row=pf_row,column=2)
88 self.loopable_variables["Direction"] = ("direction_deg",self.direction_tk_var)
89
90 pf_row += 1
91 Tkinter.Label(param_frame,text="Color:").grid(row=pf_row,column=0,sticky=Tkinter.E)
92 self.color_tk_var = Tkinter.StringVar()
93 self.color_tk_var.set("black on white")
94 bar = Tkinter.Menubutton(param_frame, textvariable=self.color_tk_var, relief=Tkinter.RAISED)
95 bar.grid(row=pf_row, column=2, sticky=Tkinter.W+Tkinter.E, pady=2, padx=2)
96 bar.menu = Tkinter.Menu(bar,tearoff=0)
97 bar.menu.add_radiobutton(label="white on black",
98 value="white on black",
99 variable=self.color_tk_var,
100 command=self.send_values)
101 bar.menu.add_radiobutton(label="black on white",
102 value="black on white",
103 variable=self.color_tk_var,
104 command=self.send_values)
105 bar['menu'] = bar.menu
106
107 pf_row += 1
108 Tkinter.Label(param_frame,text="Orientation (degrees):").grid(row=pf_row,column=0,sticky=Tkinter.E)
109 self.ortho_tk_var = Tkinter.StringVar()
110 self.ortho_tk_var.set("ortho")
111
112 manual = Tkinter.Radiobutton( param_frame, text="Manual",
113 variable=self.ortho_tk_var, value="manual")
114 manual.grid(row=pf_row,column=1)
115
116 self.orient_tk_var = Tkinter.DoubleVar()
117 self.orient_tk_var.set(self.meta_params.orientation_deg)
118
119 manual_entry = Tkinter.Entry( param_frame,
120 textvariable=self.orient_tk_var,
121 width=self.entry_width )
122 manual_entry.grid(row=pf_row,column=2)
123
124 ortho = Tkinter.Radiobutton( param_frame, text="Orthogonal to motion",
125 variable=self.ortho_tk_var, value="ortho")
126 ortho.grid(row=pf_row,column=3)
127 self.loopable_variables["Orientation"] = ("orientation_deg",self.orient_tk_var)
128
129 pf_row += 1
130 Tkinter.Label(param_frame,text="Width (pixels):").grid(row=pf_row,column=0,sticky=Tkinter.E)
131 self.width_tk_var = Tkinter.DoubleVar()
132 self.width_tk_var.set(self.meta_params.width)
133 self.make_callback_entry(textvariable=self.width_tk_var).grid(row=pf_row,column=2)
134 self.loopable_variables["Width"] = ("width",self.width_tk_var)
135
136 pf_row += 1
137 Tkinter.Label(param_frame,text="Height (pixels):").grid(row=pf_row,column=0,sticky=Tkinter.E)
138 self.height_tk_var = Tkinter.DoubleVar()
139 self.height_tk_var.set(self.meta_params.height)
140 self.make_callback_entry(textvariable=self.height_tk_var).grid(row=pf_row,column=2)
141 self.loopable_variables["Height"] = ("height",self.height_tk_var)
142
143 pf_row += 1
144 Tkinter.Label(param_frame,text="Pre stimulus duration (sec):").grid(row=pf_row,column=0,sticky=Tkinter.E)
145 self.prestim_dur_tk_var = Tkinter.DoubleVar()
146 self.prestim_dur_tk_var.set(self.meta_params.pre_stim_sec)
147 self.make_callback_entry(textvariable=self.prestim_dur_tk_var).grid(row=pf_row,column=2)
148
149 pf_row += 1
150 Tkinter.Label(param_frame,text="Stimulus duration (sec):").grid(row=pf_row,column=0,sticky=Tkinter.E)
151 self.stim_dur_tk_var = Tkinter.DoubleVar()
152 self.stim_dur_tk_var.set(self.meta_params.stim_sec)
153 self.make_callback_entry(textvariable=self.stim_dur_tk_var).grid(row=pf_row,column=2)
154 self.loopable_variables["Duration"] = ("stim_sec",self.stim_dur_tk_var)
155
156 pf_row += 1
157 Tkinter.Label(param_frame,text="Post stimulus duration (sec):").grid(row=pf_row,column=0,sticky=Tkinter.E)
158 self.poststim_dur_tk_var = Tkinter.DoubleVar()
159 self.poststim_dur_tk_var.set(self.meta_params.post_stim_sec)
160 self.make_callback_entry(textvariable=self.poststim_dur_tk_var).grid(row=pf_row,column=2)
161
164
166 self.start_x_tk_var.set( self.meta_params.start_x )
167 self.start_y_tk_var.set( self.meta_params.start_y )
168 self.velocity_tk_var.set( self.meta_params.velocity_pps )
169 self.direction_tk_var.set( self.meta_params.direction_deg )
170 self.orient_tk_var.set( self.meta_params.orientation_deg )
171 self.width_tk_var.set( self.meta_params.width )
172 self.height_tk_var.set( self.meta_params.height )
173 self.prestim_dur_tk_var.set( self.meta_params.pre_stim_sec )
174 self.stim_dur_tk_var.set( self.meta_params.stim_sec )
175 self.poststim_dur_tk_var.set( self.meta_params.post_stim_sec )
176
177 if self.meta_params.color == (0.0,0.0,0.0,1.0) and self.meta_params.bgcolor == (1.0,1.0,1.0,0.0):
178 self.color_tk_var.set( "black on white" )
179 elif self.meta_params.color == (1.0,1.0,1.0,1.0) and self.meta_params.bgcolor == (0.0,0.0,0.0,0.0):
180 self.color_tk_var.set( "white on black" )
181 else:
182 raise RuntimeError("Cannot set tk variable for color")
183
185 self.meta_params.start_x = self.start_x_tk_var.get()
186 self.meta_params.start_y = self.start_y_tk_var.get()
187 self.meta_params.velocity_pps = self.velocity_tk_var.get()
188 self.meta_params.direction_deg = self.direction_tk_var.get()
189 if self.color_tk_var.get() == "black on white":
190 self.meta_params.color = (0.0,0.0,0.0,1.0)
191 self.meta_params.bgcolor = (1.0,1.0,1.0,0.0)
192 elif self.color_tk_var.get() == "white on black":
193 self.meta_params.color = (1.0,1.0,1.0,1.0)
194 self.meta_params.bgcolor = (0.0,0.0,0.0,0.0)
195
196 if self.ortho_tk_var.get() == "ortho":
197 self.meta_params.orientation_deg = math.fmod(self.meta_params.direction_deg,360.0)
198 else:
199 self.meta_params.orientation_deg = self.orient_tk_var.get()
200 self.meta_params.width = self.width_tk_var.get()
201 self.meta_params.height = self.height_tk_var.get()
202 self.meta_params.pre_stim_sec = self.prestim_dur_tk_var.get()
203 self.meta_params.stim_sec = self.stim_dur_tk_var.get()
204 self.meta_params.post_stim_sec = self.poststim_dur_tk_var.get()
205 if self.connected:
206 self.meta_controller.set_parameters( self.meta_params )
207
209 self.meta_params.pre_stim_sec = self.prestim_dur_tk_var.get()
210 self.meta_params.stim_sec = self.stim_dur_tk_var.get()
211 self.meta_params.post_stim_sec = self.poststim_dur_tk_var.get()
212 return self.meta_params.pre_stim_sec + self.meta_params.stim_sec + self.meta_params.post_stim_sec
213
214 if __name__=='__main__':
215 frame = TargetControlFrame()
216 frame.pack(expand=Tkinter.YES,fill=Tkinter.BOTH)
217 frame.winfo_toplevel().title("%s"%(os.path.basename(os.path.splitext(sys.argv[0])[0]),))
218 frame.mainloop()
219