glfv3.x的外部函数接口包装器

glfw-cffi的Python项目详细描述


GLFW-CFFI
----
[![构建状态](https://travis ci.org/brianbruggeman/glfw cffi.svg)(https://travis ci.org/brianbruggeman/glfw cffi)
[![PYPI版本](https://img.shields.io/pypi/v/glfw cffi.svg)(https://pypi.python.org/pypi/glfw cffi)
[![状态](https://img.shields.io/pypi/status/glfw cffi.svg)(https://pypi.python.org/pypi/glfw cffi)
[![Python兼容性](https://img.shields.io/pypi/pyversions/glfw cffi.svg)(https://pypi.python.org/pypi/glfw cffi)
[![下载](https://img.shields.io/pypi/dm/glfw-cffi.svg?period=week)(https://pypi.python.org/pypi/glfw cffi)
[![覆盖状态](https://coveralls.io/repos/brianbruggeman/glfw-cffi/badge.svg?branch=development&service=github)(https://coveralls.io/github/brianbruggeman/glfw-cffi?branch=development)

glfw3的包装器,使用python的cffi。

这个包检查glfw的api的头文件,然后创建python包装的函数。

但是,我还没有对包进行足够的测试,以了解bug在哪里。因此,您可以自行承担使用风险。


此外,我还提供了glfw3 api的直接副本,可从该模块获得。因此,该模块具有python友好的函数
以及直接的c库调用。注意,后一个api需要使用更多的设置,因为您必须管理从
python到c和向后的对象转换。

在python中。

您可以申请您选择的任何OSI批准的自由软件
许可证,前提是您遵守所选择的自由软件许可证
,并遵循以下条件:

a.列出此软件的作者姓名,作为您的最终产品


b.提供将您的产品或软件归功于您的最终用户,而不需要您的最终用户要求您从何处获得您的软件


d。如果您认为提供您的更改会有一些好处
在上游,您将提交一个更改请求。虽然此条件是完全可选的,但请考虑不要成为dick。

因此,安装期间必须提供
glfw3版本。如果开发版本不可用,然后,"glfw cffi"软件包本身就包含了"glfw3.h"的一个版本。


安装-y libglfw3 dev`
-fedora/red hat:`sudo-yum install-y libglfw3 dev`
-mac os x和自制软件:`brew install glfw3`
-windows:有预编译的二进制文件可用
[64位Windows](https://github.com/glfw/glfw/releases/download/3.1.2/glfw-3.1.2.bin.win64.zip)或者
[32位Windows](https://github.com/glfw/glfw/releases/download/3.1.2/glfw-3.1.2.bin.win32.zip)

`libglfw'。您可以查看github repo中的[travis.yml](https://github.com/brianbruggeman/glfw cffi/blob/master/.travis.yml l34-l52)
文件,了解有关旧系统安装的详细信息。


e当前状态要求将环境变量"glfw_library"设置为
,并指向在已知路径中找到的已编译的.dll。此外,
glfw cffi希望头文件出现在与.dll相同的文件夹结构中的"include"文件夹中。因此,例如,如果将
库二进制文件添加到:



python库glfw cffi将在这些文件夹中的任何一个文件夹中搜索glfw3.h文件:

c:\glfw\lib\include
c:

在64位Windows 10
系统上使用32位二进制文件和lib mingw。

glfw.terminate()在必要时清理
引发运行时错误('无法初始化glfw3')

创建窗口并设置opengl上下文
win=glfw.create_窗口(title="简单窗口",width=640,高度=480)
glfw.make_context_current(win)

使用:
glfw.wait\u events();对于on event ui(类似于编辑工具)

添加以帮助开发完整的用户界面,包括:

-键盘处理
-鼠标处理
-操纵杆处理
-窗口事件
-文本事件
-路径拖放回调(用于拖放)
-错误回调

每种类型的都可以在下面的小节中找到。在装饰类
方法时,请使用:@[staticmethod](https://docs.python.org/2/library/functions.html\staticmethod)。

关于回调的更好的文档可以在[glfw网站](http://www.glfw.org/docs/latest/)上找到。


glfw

@glfw.decorators.key廑callback
def on廑key(win,key,code,action,mods):
"将key转换为事件"
如果key in[glfw.key廑escape]和action in[glfw.press]:
glfw.set廑window廑应该关闭(win,gl.gl廑true)



添加了帮助函数来将数据转换为字符串:



def display_data(key,action,mods):
"将击键转换为字符串数据"
"转换数据"
"键操作=glfw.get_键字符串(key)
"操作字符串=glfw.get_操作字符串(action)
"mods_字符串=glfw.get_mod字符串(mods)
"显示数据"
"打印('key:{key}->;"{string}"。format(key=key,string=key\u string))
print('action:{action}->;"{string}"。format(action=action,string=action\u string))
print('mods:{mods}->;"{string}"。format(mods=mods,string=mods\u string))


有时,在类中包含击键处理可能是有意义的。



import glfw
mods):
"处理键事件"
如果输入[glfw.key_escape]并在[glfw.press]中执行操作:
glfw.set_window_should_close(win,gl.gl_true)
显示刚刚发生的事情
key=glfw.get_key字符串(key)
amapping={'press':'+','release':'-','重复':'*'}
action=amapping.get(glfw.get_action_string(action))
mods=glfw.get_mod_string键)如果(u))
打印(字符串)




\glfw.decorators.cursor_pos_callback

>示例:


import glfw
from opengl import gl as gl



foo类(对象):

@staticmethod
@glfw.decorators.mouse_button_callback
def on_mouse_button(win,button,action,mods):
"处理鼠标按钮事件"
此处未使用,但是鼠标在点击时的位置是有用的。
position=glfw.get_cursor_pos(win)
handle button
如果[glfw.mouse_button_1]中的按钮和[glfw.press]中的操作:
glfw.set_window_should_close(win,gl.gl_true)
显示刚刚发生的情况
button=glfw.get_mouse_button_string(button)
amapping={'按':'+','释放':'-','重复':'*'}
action=amapping.get(glfw.get_action_string(action))
mods=glfw.get_mod_string(mods)
position='({:>;.0f},{:>;.0f})'。format(*position)
string='{}{}{}{}{}'。format(position,action[0],"+".join(str(u)for u in(mods,button)if u))
打印(string)

@staticmethod
@glfw.decorators.scroll_callback
def on_mouse_scroll(win,x_offset,Y_偏移量):
"处理鼠标滚动/滚轮事件"

@staticmethod
@glfw.decorators.cursor_pos_callback
def on_mouse_move(win,x_offset,Y轴偏移量:
"处理鼠标移动事件"





\每次都被触发。

-client focus:glfw.decorators.cursor_enter_callback
-window focus:glfw.decorators.window_focus_callback


示例:

import glfw



class foo(对象):

@staticmethod
@glfw.decorators.cursor_enter_回调
def on_enter(win,状态:
''处理窗口工作区的焦点事件

status是布尔值:true表示焦点,false表示未焦点
''

@staticmethod
@glfw.decorators.window_focus_callback
def on_enter(win,status):
'''handles focus event for a window


status is a boolean:true for focused
'


glfw



类foo(对象):

@staticmethod
@glfw.decorators.window_size_callback
def on_enter(win,width,height):
''handles resize event'


[示例/](https://github.com/brianbruggeman/glfw-cffi/tree/develop/examples)文件夹。


有些示例需要安装更多的包:

-[docopt](https://pypi.python.org/pypi/docopt):创建漂亮的命令行界面
-[numpy](https://pypi)。python.org/pypi/numpy):是一个通用数组处理包,旨在有效地操作任意记录的大型多维数组,而不会牺牲小型多维数组的太多速度
-[freetype py](https://pypi.python.org/pypi/freetype py/):freetype python为freetype库提供绑定。只绑定高级API。



开启公关时,请牢记以下准则:

-在实施之前,请打开一个问题进行讨论。
-确保对新逻辑进行了测试。
-确保代码通过了"flake8"
-将自己添加到"readme.md"的贡献者和/或您的贡献者中。

-发起人

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
linux Java线程创建跟踪   java可以让UNMIDEANER考虑文档过滤吗?   获取元素的java数组   java在ArrayList中搜索字符串并返回另一个关联字符串   java将现有私钥导入BKS密钥库   java proguard死代码分析给出了私有字段的假阳性   Java Web框架,用于新项目   java Gson:指定类或字段的命名策略   递归Java:保存递归本地计数器的值   java jfree图表集在图表中显示范围x值   Java:可以比较一个类吗对象是否具有泛型类型参数?   java JMS单个会话可以有多个MessageProducer吗?   java如何比较100条字符串记录,这些记录应该有3个值,即true、False或null   打开GUI实例的java检查   java如何重构具有多个切换情况的应用程序?   java如何更新Ubuntu上已经安装的IntelliJ IDEA?   java如何避免更改存档中文件的文件属性?