|
用户名:牡蛎 笔名:冰冻牡蛎 地区: 行业:其他 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
开源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自带的demo\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()
●版权申明暨敬告文抄公
(作者置顶)
如果你不同意,请勿转载、部分转载、引用。谢谢合作。
已锁定
(作者置顶)
●我实在受不了了
时钟指针答答的走着,一切那么宁静,宁静地可怕
突然,指针停了、时间到了,从角落里猛的跳出来一个舞蹈型僵尸
一个母僵尸,边走边搔首弄姿
所有人类霎间都被僵尸传染了,只见群魔乱舞,舞向屏幕外面的我
啊,救命啊~~~
●华人高锟及两名美科学家获2009诺贝尔物理学奖
我估摸着,国内媒体又要翻出以往的文稿,重贴出来搞个“大陆为啥没有自己的诺贝尔奖获得者”的讨论。
可是,戏子(娱乐节目)哪有诺贝尔奖?何止戏子,国内流行的嘴皮子(各类讲坛)、笔杆子(见下面,我可不是说写小说哦)也都没有诺贝尔奖啊。
教育部:中国高校科研能力世界排名第五(教育部副部长郝平说,创建世界一流大学计划启动以来,中国高校的科研能力不断提升,按科技论文数排序,中国自2004年以来一直排在世界第五位,论文数排在世界前四位的是美国、英国、德国、日本。)
●两个09年国庆节放假通知
武汉大学的:
10月1日至8日放假,共8天。9月27日(星期日)、10月10日(星期六)正常上班、上课,
9月27日(星期日)和10月7日(星期三)的课对调;10月8日(星期四)和10月10日(星期
六)的课对调。
华中科技大学的:
今年国庆节、中秋节学校放假的时间定为10月1日至8日,共8天。其中,10月1日(星期四
)、10月2日(星期五)、10 月3日(星期六)为国庆节、中秋节法定节假日,10月4日(
星期日)照常公休,10月3日(星期六)公休日及中秋节分别调至10月5日(星期一)、10
月 6日(星期二);9月27日(星期日)、10月10日(星期六)公休日调至10月7日(星期
三)、10月8日(星期四)。9月27日(星期日)上10月7 日(星期三)的课,10月10日(
星期六)上10月8日(星期四)的课;10月7日(星期三)上9月27日(星期日)的课,10月
8日(星期四)上10月 10日(星期六)的课。10月1日~10月6日全校停课。
●银行卡诈骗的骗子
本贴专记录个人碰到的电话诈骗——读者别上当了,给他们打钱哦:
按网上的方法,乱密码登陆网上登录个人网银,出现提示“该业务已被冻结[0503] ”,是这个账户被冻结了吧?
有人比我先整这杂 种了?
●处事经验总结
写下这些经验,只是从别人的角度来总结,并不代表我从心里认同所有条目
●使用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应用程序的例子(还是那句话,那些简单的弹窗、列表就别提了,没啥意思)