关于作者

用户名:牡蛎
笔名:冰冻牡蛎
地区:
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



Blender

脚本语言

教学制作软件

版权申明

凡欲转载、部分转载、引用我原创的文章,请标明作者是牡蛎,同时给出原始连接;可以部分转载、引用我的文章,前提是这不会引起他人误解我的原意。未经书面允许,我的文章、文章部分不可以用于商业用途(含传统出版物、需要积分或者虚拟货币才可以浏览的网上内容)。如果你不同意,请勿转载、部分转载、引用。谢谢合作。

访问统计:
文章个数:250
评论个数:379
留言条数:6




Powered by BlogDriver 2.1

牡蛎的混沌世界

 

开源CG软件,特别是Blender 还有其他杂七杂八的东西

文章

●Python悬疑  (作者置顶)

真是烦人,碰到一些问题,解决不了,几个mail list或者bbs上都提出了问题,但是就是无人可以解决,放出来看看有没有奇迹发生吧。我使用win2k、py24和25

1.用wxpython编写一个简单网页浏览器,其实也不简单,因为——如何捕获那些新弹出的页面(newwindow2)事件,并且让新页面可以显示在当前的frame中或者新的frame中——而绝不是在系统默认的浏览器中弹出

2.http://osdir.com/ml/python.ctypes/2005-09/msg00024.html提出一种跨平台的、返回FILE指针的方案,
import sys
import ctypes
class FILE(ctypes.Structure):pass

FILE_P = ctypes.POINTER(FILE)

PyFile_AsFile = ctypes.pythonapi.PyFile_AsFile
PyFile_AsFile.argtypes = [ctypes.py_object]
PyFile_AsFile.restype = FILE_P

stdout_file = PyFile_AsFile(sys.stdout)

fputs=ctypes.cdll.msvcrt.fputs
fputs.argtypes=[ctypes.c_char_p, FILE_P]
fputs.restype=ctypes.c_int
fputs("Hello, there.\n", stdout_file)
但是这个代码只会出错
H:\sap-24>h:\python25\python pyfile2.py
Traceback (most recent call last):
File "pyfile2.py", line 17, in
fputs("Hello, there.\n", stdout_file)
WindowsError: exception: access violation writing 0x00000010

3.我打算用ctypes+wx.net的wx-c.dll实现一个较小的GUI方案(也就是,我知道wxPython之类的,不用麻烦各位再推荐),这里的代码虽然可以显示frame,但是总是报错说“unexpected parameter 'mini.py'”,于是不得不点击“确定”按钮退出。其中mini.py是我的程序的名字。wx-c.dll取自http://prdownloads.sourceforge.net/wxnet/wx.NET-0.7.2-Windows-Build.zip?download ——是的,这是一个纯C的wxWidget接口,不是C++也不是.NET的,wx.net以及www.freebasic.net均使用它开发GUI程序
from ctypes import *

wx=CDLL('wx-c.dll')

class _wxApp(Structure):pass
PTR_wxApp=POINTER(_wxApp)

wxApp=wx.wxApp_ctor
wxApp.restype=PTR_wxApp

wxApp_RegisterVirtual=wx.wxApp_RegisterVirtual
wxApp_RegisterVirtual.restype=None

_wxApp_Run=wx.wxApp_Run
_wxApp_Run.restype=None
def wxApp_Run():
    argc=0
    argv=''
_wxApp_Run(argc, argv)

class _wxFrame(Structure):pass
PTR_wxFrame=POINTER(_wxFrame)

wxFrame=wx.wxFrame_ctor
wxFrame.restype=PTR_wxFrame

class _wxFrame(Structure): pass
PTR_wxFrame=POINTER(_wxFrame)
wxFrame_Create=wx.wxFrame_Create
wxFrame_Create.restype=c_int

class _wxSize(Structure): pass
PTR_wxSize=POINTER(_wxSize)

wxSize=wx.wxSize_ctor
wxSize.restype=PTR_wxSize

wxWindow_Show=wx.wxWindow_Show
wxWindow_Show.restype=None

wxApp_OnInit=wx.wxApp_OnInit
wxApp_OnInit.restype=c_int

class _wxBoxSizer(Structure):pass
PTR_wxBoxSizer=POINTER(_wxBoxSizer)
wxBoxSizer=wx.wxBoxSizer_ctor
wxBoxSizer.restype=PTR_wxBoxSizer

wxWindow_SetAutoLayout=wx.wxWindow_SetAutoLayout
wxWindow_SetAutoLayout.restype=None

wxWindow_SetSizerAndFit=wx.wxWindow_SetSizerAndFit
wxWindow_SetSizerAndFit.restype=None

def Callback(restype=None, *optional):
    return CFUNCTYPE(restype, *optional)

wxDEFAULT_FRAME_STYLE =(0x0800|0x0040|0x0400|0x0200|0x20000000|0x00400000)

global app, sizer

@Callback(c_int)
def App_OnInit( ):
    global app, sizer
    frame = wxFrame( )
    wxFrame_Create( frame, 0, 1, "Pure python Wxwidget",
                                 wxSize( -1, -1 ), wxSize( -1, -1 ),
                                 wxDEFAULT_FRAME_STYLE , "frame")
                                 wxWindow_Show( frame, 1 )
    return wxApp_OnInit( app )

@Callback(c_int)
def App_OnExit():
    return wxApp_OnExit( app )

app = wxApp( )
wxApp_RegisterVirtual( app, App_OnInit, App_OnExit )
wxApp_Run()

4.打算写一个所见所得(WYSIWG)的图文编辑器,但是发现wxPython保存文件时,把图片嵌入其中了,而我需要的是,保存文件的本地文件名。在wxPython的列表上提问,答案是自定义io文件格式的接口仍不可用

5.实在看不去和wxPython官方例子区别何在的代码
使用wxpython-2.8-msw-unicode的RichTextCtrl,但是ctrl+c/v/p/x/y都会报告
Traceback (most recent call last):
File "H:\bug_main.py", line 67, in ForwardEvent
self.rtc.ProcessEvent(evt)
RuntimeError: maximum recursion depth exceeded

但是wxpython自带的dem\RichTextCtrl.py却不会报错,所以问题应该是在我的代码中。

无奈检查不出来——我的evt处理,实在看不出和原版的demo有什么不同——哪位帮忙指
点一下迷津吧(请别说os.sys.setrecursionlimit),谢谢

报错的代码

import wx
import wx.richtext as rt

class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)

        # Menu Bar
        self.frame_1_menubar = wx.MenuBar()
        self.fileMenu = wx.Menu()
        self.mnuitmFileExit = wx.MenuItem(self.fileMenu, wx.NewId(),
                          "E&xit\tCtrl+Q", "", wx.ITEM_NORMAL)
        self.fileMenu.AppendItem(self.mnuitmFileExit)
        self.frame_1_menubar.Append(self.fileMenu, "&File")
        self.editMenu = wx.Menu()

        self.mnuitmEditUndo = wx.MenuItem(self.editMenu, wx.NewId(),
                        "&Undo\tCtrl+Z", "", wx.ITEM_NORMAL)
        self.editMenu.AppendItem(self.mnuitmEditUndo)
        self.mnuitmEditRedo = wx.MenuItem(self.editMenu, wx.NewId(),
                        "&Redo\tCtrl+Y", "", wx.ITEM_NORMAL)
        self.editMenu.AppendItem(self.mnuitmEditRedo)
        self.mnuitmEditCut = wx.MenuItem(self.editMenu, wx.NewId(),
                        "Cu&t\tCtrl+X", "", wx.ITEM_NORMAL)
        self.editMenu.AppendItem(self.mnuitmEditCut)
        self.mnuitmEditCopy = wx.MenuItem(self.editMenu, wx.NewId(),
                        "&Copy\tCtrl+C", "", wx.ITEM_NORMAL)
        self.editMenu.AppendItem(self.mnuitmEditCopy)
        self.mnuitmEditPaste = wx.MenuItem(self.editMenu, wx.NewId(),
                        "&Paste\tCtrl+V", "", wx.ITEM_NORMAL)
        self.editMenu.AppendItem(self.mnuitmEditPaste)
        self.frame_1_menubar.Append(self.editMenu, "&Edit")

        self.SetMenuBar(self.frame_1_menubar)
        # Menu Bar end

        self.rtc = rt.RichTextCtrl(self, -1, style=wx.VSCROLL|wx.HSCROLL)
        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_MENU, self.onFileExit, self.mnuitmFileExit)
        self.Bind(wx.EVT_MENU, self.ForwardEvent, self.mnuitmEditUndo)
        self.Bind(wx.EVT_MENU, self.ForwardEvent, self.mnuitmEditRedo)
        self.Bind(wx.EVT_MENU, self.ForwardEvent, self.mnuitmEditCut)
        self.Bind(wx.EVT_MENU, self.ForwardEvent, self.mnuitmEditCopy)
        self.Bind(wx.EVT_MENU, self.ForwardEvent, self.mnuitmEditPaste)

    def __set_properties(self):
        wx.CallAfter(self.rtc.SetFocus)
        self.rtc.Freeze()
        self.rtc.WriteText("Hello")
        self.rtc.Thaw()

    def __do_layout(self):
        grid_sizer_1 = wx.FlexGridSizer(1, 1, 5, 0)
        grid_sizer_4 = wx.FlexGridSizer(5, 1, 2, 0)
        grid_sizer_4.Add(self.rtc, 0, wx.EXPAND, 0)
        grid_sizer_4.AddGrowableRow(0)
        grid_sizer_4.AddGrowableCol(0)
        grid_sizer_1.Add(grid_sizer_4, 1, wx.ALL|wx.EXPAND, 0)
        self.SetSizer(grid_sizer_1)
        grid_sizer_1.Fit(self)
        grid_sizer_1.AddGrowableRow(0)
        grid_sizer_1.AddGrowableCol(0)
        self.Layout()
        self.Centre()

    def onFileExit(self, evt):
        self.Close(True)

    def ForwardEvent(self, evt):
        self.rtc.ProcessEvent(evt)
   
if __name__ == "__main__":
        app = wx.PySimpleApp(0)
        wx.InitAllImageHandlers()
        frame_1 = MyFrame(None, -1, "")
        app.SetTopWindow(frame_1)
        frame_1.Show()
        app.MainLoop()

- 作者: 冰冻牡蛎 2008年01月7日, 星期一 21:53  回复(1) |  引用(0) 加入博采

●版权申明暨敬告文抄公  (作者置顶)
  1. 凡欲转载、部分转载、引用我原创的文章,请标明作者是牡蛎,同时给出文章原始连接;可以部分转载、引用我的文章,前提是这不会引起他人误解我的原意。
  2. 未经书面允许,我的文章、文章部分不可以用于商业用途(含传统出版物、需要积分或者虚拟货币才可以浏览的网上内容)。
  3. 禁止这样的网站转载我的任何文章,即该网站会说“本文章版权归原始作者及我网站所有”这样的话——我的文章的版权只属于我自己,和转载网站没有任何关系!

如果你不同意,请勿转载、部分转载、引用。谢谢合作。

- 作者: 冰冻牡蛎 2007年05月25日, 星期五 13:03  回复(0) |  引用(0) 加入博采

已锁定  (作者置顶)
此日志的浏览权限已被作者锁定,请同作者联系,发送短消息,如果你的身份符合作者的要求,点击此处可以进行浏览

- 作者: 冰冻牡蛎 2007年01月27日, 星期六 11:12  回复(1) |  引用(0) 加入博采

●处事经验总结
  1. 绝 对 不 要 相 信 任 何 人 的 承 诺 , 不 管 这 个 人 是 否 很 熟 、 或 者 已 相 处 很 多 年 。 在 可 能 的 情 况 下 , 尽 量 留 下 书 面 证 据 — — 当 然 , 书 面 证 据 也 是 会 有 人 不 承 认 的 — — 如 果 无 法 留 下 证 据 , 最 好 不 要 理 会 他
  2. 出 了 问 题 时 , 不 要 拿 别 人 的 承 诺 当 做 支 持 自 己 的 证 据 — — 就 当 你 曾 经 听 到 一 个 很 响 的 p 好 了
  3. 给 别 人 面 子 , 特 别 是 领 导, 就 算 他 早 就 声 明 “ 你 可 以 自 己 处 理 ” , 也 要 隔 三 差 五 和 他 汇 报 , 至 少 将 事 情 处 理 结 果 和他 说 明

写 下 这 些 经 验 , 只 是 从 别 人 的 角 度 来 总 结 , 并 不 代 表 我 从 心  里 认 同 所  有 条 目

- 作者: 冰冻牡蛎 2009年06月11日, 星期四 11:15  回复(0) |  引用(0) 加入博采

●处事经验总结
  1. 绝对不要相信任何人的承诺,不管这个人是否很熟、或者已相处很多年。在可能的情况下,尽量留下书面证据——当然,书面证据也是会有人不承认的——如果无法留下证据,最好不要理会他
  2. 出了问题时,不要拿别人的承诺当做支持自己的证据——就当你曾经听到一个很响的p好了
  3. 给别人面子,特别是领 导,就算他早就声明“你可以自己处理”,也要隔三差五和他汇报,至少将事情处理结果和他说明

写下这些经验,只是从别人的角度来总结,并不代表我从心里认同所有条目

- 作者: 冰冻牡蛎 2009年06月11日, 星期四 11:14  回复(0) |  引用(0) 加入博采

●处事经验总结
  1. 绝对不要相信任何人的承诺,不管这个人是否很熟、或者已相处很多年。在可能的情况下,尽量留下书面证据——当然,书面证据也是会有人不承认的——如果无法留下证据,最好不要理会他
  2. 出了问题时,不拿别人的承诺当做支持自己的证据——就当你曾经听到一个很响的p好了
  3. 给别人面子,特别是领导,就算他早就声明“你可以自己处理”,也要隔三差五和他汇报,至少将事情处理结果和他说明

写下这些经验,只是从别人的角度来总结,并不代表我从心里认同所有条目

- 作者: 冰冻牡蛎 2009年06月11日, 星期四 11:14  回复(0) |  引用(0) 加入博采

●处事经验总结
  1. 绝对不要相信任何人的承诺,不管这个人是否很熟、或者已相处很多年。在可能的情况下,尽量留下书面证据——当然,书面证据也是会有人不承认的——如果无法留下证据,最好不要理会他
  2. 出了问题时,不要拿别人的承诺当做支持自己的证据——就当你曾经听到一个很响的p好了
  3. 给别人面子,特别是领导,就算他早就声明“你可以自己处理”,也要隔三差五和他汇报,至少将事情处理结果和他说明

写下这些经验,只是从别人的角度来总结,并不代表我从心里认同所有条目

- 作者: 冰冻牡蛎 2009年06月11日, 星期四 11:13  回复(0) |  引用(0) 加入博采

●使用HTA + CSS + JScript编写程序?

我在不同的地方、千百遍的看到了这样的情景

问:现在编写gui用啥
答:HTA + CSS + JScript,现在流行

这个“答”往往就是这样的一句话,然后就哑了。于是,虽然我千百遍看到这样的回帖了,但是仍不得其解。

简单看了下微软页面对hta的介绍,貌似只是把html的textarea等等小儿科用了下。有点疑惑,特别是针对非联网的应用——那些简单的弹窗、列表就别提了,没啥意思(不幸的是,网上的例子都是“这里举一个简单的例子,xxx,看,简单吧?更复杂的网上搜索可以找到很多”——我就没有找到什么很复杂的啊)。
1.hta可以开发到什么复杂程度的程序?数据库?画图板?
2.如何发布hta的程序?对于复杂的程序(如果问题1有答案),用户需要安装什么?
  网上的例子,要显示一个工具栏,也得先装ms office——别说这个事必备的——那么
  向用户发布程序,我还要给他一份officie?就算让他自己安装office,为了p大一点的
  hta,值得吗?可以把office的控件单独提出来吗,可以的话这样发布程序合法吗?
3.如何保护自己的程序的源代码?

lynnboy答“HTA其实就是封装的网页,这个可以应用Windows脚本宿主,所以VBScript和JScript什么的都可以用,同样任何支持脚本的COM对象也就都可以用了。你提到的这个安装Office的例子就是要用到Office里面带的COM对象做为工具栏什么的。实际上每个Windows平台都有的标准控件肯定基本够了。理论上你也可以用网页上流行的各种富界面脚本技术。”

这样看来,基本上HTA也无法开发啥大应用程序,是个准废物。哪位有不同的观点,拿事实说话吧,我一直期待着一个详细的、稍强大点的hta应用程序的例子(还是那句话,那些简单的弹窗、列表就别提了,没啥意思)

- 作者: 冰冻牡蛎 2009年06月6日, 星期六 11:29  回复(1) |  引用(0) 加入博采

●成都公交车燃烧

http://news.qq.com/a/20090606/000202.htm

标题是“成都公交车燃烧:事故车只能打开最后排车窗”

现在的车,有多少是可以打开更多窗户的呢?

- 作者: 冰冻牡蛎 2009年06月6日, 星期六 10:50  回复(0) |  引用(0) 加入博采

●JFreeChart and more chart in Python

在python世界,我一直找不到一个绘制chart的免费模块——其实不是没有,而是我挑了点——这个模块需要提供的chart类型多、可以输出漂亮的图片到文件

我知道会有人跳出来推荐matplotlib,但是我认为它的方向是plot。虽然chart可以在plot的基础上构建,但是我是懒人,我会等matplotlib提供越来越多chart功能再说。(gnuplot可以画的chart,也不会比matplot多吧,而且我不喜欢gnuplot出图的土土的风格,一起忽略掉)

那么到底什么是chart呢?www.advsofteng.com/cdpython.html 的ChartDirector这个商业软件就是

曾经有个www.rmchart.com。画的chart还算漂亮,我也为它提供了一个py的库,但是这东西只运行在windows上,chart种类不多,更要命的是现在这个网站不见了!(有人认识作者吗?劝他继续开发或者开源吧,哈哈)

开源界有名的chart库,应该就是http://www.jfree.org/jfreechart,俺终于用http://jpype.sourceforge.net/在python中成功调用它了——不过jpype在我这里存在一个问题,jpype.shutdownJVM()会让python出错。不知道不要这一句含有什么影响

如果说用jpype只是需要大大的jvm,但是毕竟还是使用jfreechart生成本地文件的功能——那么,我喜欢http://teethgrinder.co.uk/open-flash-chart/gallery-bar-7.php。可惜不知道怎么把这个给网络使用的chart lib绘制的图形编程自动保存 :(

- 作者: 冰冻牡蛎 2009年05月10日, 星期日 21:47  回复(0) |  引用(0) 加入博采