2010-03-22 17 views
9

Tôi đang viết một chương trình mẫu nhỏ và tôi muốn ghi đè hành vi mặc định của pyglet của ESC đóng ứng dụng. Tôi có điều gì đó ở mức độ:Pyglet, làm cách nào để khóa ESCAPE không đóng cửa sổ?

window = pyglet.window.Window() 
@window.event 
def on_key_press(symbol, modifiers): 
    if symbol == pyglet.window.key.ESCAPE: 
     pass 

nhưng điều đó dường như không hoạt động.

Trả lời

1

Trên nhóm Google cho pyglet-users, đề xuất có thể làm quá tải cửa sổ.Window.on_key_press(), mặc dù không có ví dụ mã nào về nó.

17

Tôi biết câu hỏi cũ, nhưng chỉ trong trường hợp. Bạn phải trả lại pyglet.event.EVENT_HANDLED để ngăn chặn hành vi mặc định. Tôi đã không thử nghiệm nó, nhưng trong lý thuyết này sẽ làm việc:

@window.event 
def on_key_press(symbol, modifiers): 
    if symbol == pyglet.window.key.ESCAPE: 
     return pyglet.event.EVENT_HANDLED 
+3

Tôi đã thử nghiệm, nó hoạt động. – Shavais

+0

Đây phải là câu trả lời được chấp nhận, bởi vì nó thực sự trả lời câu hỏi. –

4

Tương tự cho tôi. Câu hỏi là cũ, nhưng tôi đã phát hiện ra rằng bạn nên sử dụng các cơ chế xử lý cửa sổ, do đó làm cho sự kiện hiện tại không truyền bá thêm.

Bạn có thể ngăn sự kiện còn lại xử lý trong ngăn xếp nhận được sự kiện bằng cách trả về giá trị thực. Việc xử lý sự kiện sau đây, khi đẩy vào cửa sổ, sẽ ngăn chặn phím thoát khỏi thoát khỏi chương trình :

def on_key_press(symbol, modifiers): 
    if symbol == key.ESCAPE: 
     return True 

window.push_handlers(on_key_press) 

Dưới đây là link

+0

+1 cho liên kết tới tài liệu – henrebotha

1

Nó đơn giản trên thực tế, lớp cửa sổ và overide the on_key_press, như sau:

class MyWindow(pyglet.window.Window): 
    def on_key_press(self, symbol, modifiers): 
     if symbol == key.ESCAPE: 
      return pyglet.event.EVENT_HANDLED 
Các vấn đề liên quan