Numpy, PySide (python)+ OpenGL(C) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Hualin
V2EX    Python

Numpy, PySide (python)+ OpenGL(C)

  •  
  •   Hualin 2012-04-17 05:29:54 +08:00 via iPod 4675 次点击
    这是一个创建于 4996 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大家好,这个论坛真酷。
    最近我在编一个程序,思路如下:

    PySide, python的Qt 在win上实现一个GUI;
    Numpy实现一个矩阵处理的算法;
    opengl 纯C 实现算法的可视化,就是画一个散点图,还有之间的连接,给个接口,让gui来调用和调节图形的细节样式。

    为啥要这么纠结?还是出于速度的考虑。我已经完成了算法部分,用python,很哈皮。

    请教大家个问题:
    pyside不能用qt create啊,坑爹啊!!那么大家设计控件布局的时候不能可视化吗?全在代码里死弄?不会吧?应该有可视ide的吧?

    opengl我想用c写,虽然我从来没写过,还是很2的选择了这个,原因就是速度,听说python的opengl很不理想,而各个平台的opengl的代码风格都差不多,请问,这部分c代码能被python代码调用吗?或者它们一起工作?我看到python上可以加c的扩展模块,但还是不知道如何入手。
    14 条回复    1970-01-01 08:00:00 +08:00
    cooka
        1
    cooka  
       2012-04-17 09:25:59 +08:00 via Android   1
    qt designer , 可以用来画界面
    thedevil7
        2
    thedevil7  
       2012-04-17 19:01:49 +08:00   1
    designer +1, 画好了界面再在代码里面引用. 可以看一下我的 mainwindow.py 以及 ui_mainwindow.py (ui_mainwindow.ui 就是用 designer 画好并生成的.)
    https://github.com/thedevil7/staffManagement 希望对你有帮助
    reus
        3
    reus  
       2012-04-17 23:28:49 +08:00   1
    没必要用c写opengl,qt就有个QGraphicsView框架用于绘图,支持opengl渲染,而且框架本身抽象层次比较高,相当方便
    http://qt-project.org/doc/qt-5.0/graphicsview.html
    reus
        4
    reus  
       2012-04-17 23:30:29 +08:00   1
    whtsky
        5
    whtsky  
       2012-04-17 23:44:59 +08:00 via Android   1
    DESIGNER也可以用的...
    可以通过工具生成py,pyqt也支持直接导入ui文件...
    reus
        6
    reus  
       2012-04-18 22:46:50 +08:00   1
    http://pyqwt.sourceforge.net/ 发现这个跟楼主要做的差不多
    Hualin
        7
    Hualin  
    OP
       2012-04-20 07:24:18 +08:00 via iPod   1
    多谢大家,真的很有用。

    看来这种跨平台的想法早就有人实现了,至少证明,我的想法没错。

    这是一个数据可视化算法,用来检测其他机器学习算法最后是否能保存临点之间的关系。matlab已经跑过了,就是太慢,其他高级语言平台又没法画出来,所以就做个这样的尝试。今后我可能要经常写这样的代码,第一次折腾折腾也有好处。

    现在的问题是如何让python调用c的opengl,我只想用标准库。下午走之前看到一片wiki,看看明天能捣鼓成不。
    thedevil7
        8
    thedevil7  
       2012-04-23 22:30:59 +08:00
    之前的窗口一直都是用 designer 画的, 因为不熟悉手写(handcode)图形界面的代码.
    这次做的窗口由于需要重新定义(reimplement) 几个类, 所以直接采用了手写代码的形式.

    这次做完了的经验: 其实仿照 pyuic 由 .ui 文件生成的 .py 文件来写, 再参照 Rapid Gui Programming With Python and PyQt 的几个例子很容易能写出来.

    如果你需要参考, 可以在我的 staffManagement 的 feature/list-data-no-wait 分支里面看看 ui_groupstaff.py(由 .ui 文件生成), 以及 groupstaff.py (直接手写, 没有利用前一个文件).

    手写代码的好处是:
    ....1. 可以自定义某些 widget 的函数.
    ....2. 需要的文件少.
    可能的缺点:
    ....1. 可能不好重新修改界面.
    Hualin
        9
    Hualin  
    OP
       2012-04-23 23:40:08 +08:00
    @thedevil7 恩,我看到你给我的代码咯,写得好啊,觉得Qt的逻辑分明好懂比MFC强点。

    目前我已经将新写的python算法包和过去编的python算法链接起来了。opengl的可视化也有了眉目。

    我也许大概似乎看懂了如何写C扩展。但有一个疑问,也可能是我C好长时间不用了,

    我看写C wrapper部分的代码,会将参数传到 自己的C函数里面。我想将python算法中的numpy.matrix对象用opengl画出来,我觉得这个不容易

    1. 如何共享内存对象?我是说,给wrapper函数传形参我会,但能不能传一个指针,指向这个matrix的数据结构?

    2. 当然,我又想了一下,C 里面也没法直接识别numpy.matrix的对象,所以必须在传入C代码之前将它转换成可以被C识别的数据结构,是python内部实现的list吗?

    因为我觉得从python输出一个一个矩阵文件,再让C读,那就不是hybrid编程了,好傻啊。。。

    Qt的部分我先暂时放下了,我的赶紧先把最重要的可视化搞好,一次折腾这么多东东有点hold不住呢。谢谢咯。
    thedevil7
        10
    thedevil7  
       2012-04-23 23:46:20 +08:00
    @Hualin 因为我也只是用到了 Python 和 PyQt, 所以... 我帮不了你了..不如再开个帖子问问?
    reus
        11
    reus  
       2012-04-25 12:38:32 +08:00
    @Hualin 可视化可以直接用Qt的QGraphicsView类,比如下面一段代码

    https://gist.github.com/2486397

    就能显示



    还能加各种控件进去,还能用opengl渲染,性能不是问题
    reus
        12
    reus  
       2012-04-25 12:40:54 +08:00
    这代码究竟要怎么贴 = =
    http://gist.github.com/2486397
    reus
        13
    reus  
       2012-04-25 12:59:57 +08:00
    再比如,画了一条曲线,这条曲线就是用一个QGraphicsItem类的对象来表示的,你可以直接且独立地对这条曲线进行移动和缩放等操作,底层的重绘等都可以不关心。又或者,你想直接用鼠标来移动一些点,可以直接将对象的ItemIsMovable设成True,就可以实现了。这种层次的抽象,如果要从c扩展封装opengl做起,是需要很大功夫的,也没有必要。直接用这个Qt自带的库来实现可视化吧
    Hualin
        14
    Hualin  
    OP
       2012-04-26 18:03:27 +08:00
    @reus 多谢咯,qt有本地的,这我开始就知道了,就像MFC也可以在窗口里面画画一样,能比硬件API高级一点,至少它做到了设备无关性。我已经快完成咯,不要老颠覆我 T_T
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2832 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 13:56 PVG 21:56 LAX 05:56 JFK 08:56
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86