본문 바로가기
Python Library/VPython

[VPython] Mouse and Keyboard Events

by goatlab 2022. 1. 18.
728x90
반응형
SMALL

Mouse and Keyboard Events

 

VPython은 마우스 및 키보드 입력을 받을 수 있다.

 

 

event는 사용자가 마우스나 키보드를 사용하여 수행할 수 있는 작업이다.

<event>는 하나의 event일 수도 있고 공백으로 구분된 event 리스트일 수도 있다.

 

사용자 event를 listen하는 방법에는 두 가지가 있다.

 

 

ev = scene.waitfor (‘  ‘)

 

이 method는 event를 한 번만 기다린다.

 

box()
ev = scene.waitfor(‘click’)
print(ev.event, ev.pos)
 

 

event를 두 번 이상 listen하려면 잠시 (while True:) loop를 사용한다.

 

box()
while True:
 ev = scene.waitfor('keydown')
 print(ev.key, ev.which) # name and numeric code of key
 print(keysdown()) # list of all pressed keys
 
 

scene.bind (‘  ‘, function) (recommended)

 
이 method는 장면 (canvas)을 callback 함수에 bind하고 event에서 함수를 실행한다. 함수는 ev를 입력으로 받아들여야 한다.
 
box()
def callback(ev):
 print(ev.event) # name of event
# call function on any one of these events
scene.bind('mouseup mousedown',callback)

 

Picking an Object

 

obj = scene.mess.pick은 마우스가 가리키는 객체를 가져온다. Obj=개체가 선택되지 않은 경우 없음.

 

b = box()
def callback(ev):
 obj = scene.mouse.pick # pick the object
 if obj != None: # check obj is not None
 obj.pos = scene.mouse.pos # set obj to mouse position
scene.bind('click',callback) # call function on any one of these events

 

Changing Colors Example

 

s = sphere(color=color.cyan)
def change():
 if s.color.equals(color.cyan):
 s.color = color.red
 else:
 s.color = color.cyan
scene.bind('click', change)

 

Create Sphere on Click Example

 

scene.range = 3
box()
def createSphere(ev):
 loc = ev.pos
 sphere(pos=loc, radius=0.2, color=color.cyan)
scene.bind('click', createSphere)

 

Create and Drag Sphere Example

 

scene.range = 3
box()
drag = False
s = None # declare s to be used below
def down():
 global drag, s
 s = sphere(pos=scene.mouse.pos,
 color=color.red,
 size=0.2*vec(1,1,1))
 drag = True
def move():
 global drag, s
 if drag: # mouse button is down
 s.pos = scene.mouse.pos
def up():
 global drag, s
 s.color = color.cyan
 drag = False
scene.bind("mousedown", down)
scene.bind("mousemove", move)
scene.bind("mouseup", up)

 

Typing Text into Label Example

 

prose = label() # initially blank text
def keyInput(evt):
 s = evt.key
 if len(s) == 1: # includes enter ('\n')
 prose.text += s # append new character
 elif s == 'delete' and len(prose.text) > 0:
 prose.text = prose.text[:-1] # erase letter
scene.bind('keydown', keyInput)

 

Moving Sphere Using Arrow Keys

 

scene.range = 20
ball = sphere(color=color.cyan)
v = vec(0,0,0)
dv = 0.2
dt = 0.01
while True:
 rate(30)
 k = keysdown() # a list of keys that are down
 if 'left' in k: v.x -= dv
 if 'right' in k: v.x += dv
 if 'down' in k: v.y -= dv
 if 'up' in k: v.y += dv
 ball.pos += v*dt
728x90
반응형
LIST

'Python Library > VPython' 카테고리의 다른 글

[VPython] Miscellaneous (2)  (0) 2022.01.18
[VPython] Miscellaneous (1)  (0) 2022.01.18
[VPython] Math Functions  (0) 2022.01.18
[VPython] Animations  (0) 2022.01.18
[VPython] Graphs (2)  (0) 2022.01.17