1
cooka 2012-04-17 09:25:59 +08:00 via Android 1
qt designer , 可以用来画界面
|
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 希望对你有帮助 |
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 |
4
reus 2012-04-17 23:30:29 +08:00 1
|
5
whtsky 2012-04-17 23:44:59 +08:00 via Android 1
DESIGNER也可以用的...
可以通过工具生成py,pyqt也支持直接导入ui文件... |
6
reus 2012-04-18 22:46:50 +08:00 1
http://pyqwt.sourceforge.net/ 发现这个跟楼主要做的差不多
|
7
Hualin OP 多谢大家,真的很有用。
看来这种跨平台的想法早就有人实现了,至少证明,我的想法没错。 这是一个数据可视化算法,用来检测其他机器学习算法最后是否能保存临点之间的关系。matlab已经跑过了,就是太慢,其他高级语言平台又没法画出来,所以就做个这样的尝试。今后我可能要经常写这样的代码,第一次折腾折腾也有好处。 现在的问题是如何让python调用c的opengl,我只想用标准库。下午走之前看到一片wiki,看看明天能捣鼓成不。 |
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. 可能不好重新修改界面. |
9
Hualin OP @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不住呢。谢谢咯。 |
11
reus 2012-04-25 12:38:32 +08:00
@Hualin 可视化可以直接用Qt的QGraphicsView类,比如下面一段代码
https://gist.github.com/2486397 就能显示 还能加各种控件进去,还能用opengl渲染,性能不是问题 |
12
reus 2012-04-25 12:40:54 +08:00
这代码究竟要怎么贴 = =
http://gist.github.com/2486397 |
13
reus 2012-04-25 12:59:57 +08:00
再比如,画了一条曲线,这条曲线就是用一个QGraphicsItem类的对象来表示的,你可以直接且独立地对这条曲线进行移动和缩放等操作,底层的重绘等都可以不关心。又或者,你想直接用鼠标来移动一些点,可以直接将对象的ItemIsMovable设成True,就可以实现了。这种层次的抽象,如果要从c扩展封装opengl做起,是需要很大功夫的,也没有必要。直接用这个Qt自带的库来实现可视化吧
|
14
Hualin OP @reus 多谢咯,qt有本地的,这我开始就知道了,就像MFC也可以在窗口里面画画一样,能比硬件API高级一点,至少它做到了设备无关性。我已经快完成咯,不要老颠覆我 T_T
|