wxGlade & wxFormBuilder

最近在使用wxPython写一个编辑器,做界面使用了wxGlade,以前我只用过wxWidgets+wxFormBuilder的组合,感觉wxPython+wxGlade确实效率更高些,当然这受益于python语言的简洁易用。

几点使用体会:

1)wxGlade自动生成的代码可以和自己写的代码和平共处。在使用wxFormBuilder时,除了生成界面代码,还要生成派生类代码,这样界面代码不需要做任何修改,自己的代码直接写在派生类中。这种方法比较面向对象了,但是缺点是派生类代码生成后如果要改变,就必须合并自己写的代码。而wxGlade生成的界面代码可以往里面添加自己的代码,界面改变后重新生成代码并不会删除你自己的代码。这主要靠代码中的一些wxGlade标记注释实现。比如# begin wxGlade: MainFrame.__init__和# end wxGlade之间的代码是wxGlade生成的,你不能在这里面加代码,否则会被覆盖掉,但在外面加就没问题了。

2)使用方式方面wxGlade和wxFormBuilder基本差不多。都支持自定义控件。不过wxFormBuilder需要填自定义控件的构造等,而wxGlade只要填一个类名。使用是简单了,但是没法自己写构造函数,比如我使用了一个wx.gizmos.TreeListCtrl,构造时想加入一些style是不行了。另外,wxGlade也不支持wxAUI,还是很遗憾的。

3)wxGlade的菜单和工具条编辑器不能使用wxArt提供的图片,只能使用外部载入的图片。

4)wxGlade不能自动生成id的define,我只能填一个数,不过在菜单上可以填-1,因为事件绑定是使用名字,而工具条就不行了,只能填数了。不过wxPython的事件绑定使用方式和wxWidgets不太一样,wxFormBuilder是自动生成id的define的,事件通过id绑定,工具条和菜单使用同一id即可关联。而wxPython+wxGlade时,我是通过填入相同的事件处理器来完成。不过他们都没有SWT的菜单和工具条关联的机制方便~ SWT很久没用了,依稀记得只要定义action即可

5)Layout编辑还OK,wxGlade还可以更换sizer的类型,貌似wxFormBuilder不行

为了实现Python图书管理系统GUI界面,我们可以使用wxPythonwxGladewxPython是一个Python的GUI工具包,而wxGlade是一个wxPython支持的GUI编辑器。下面是实现Python图书管理系统GUI界面的步骤: 1.安装wxPythonwxGlade。可以使用pip安装wxPython使用以下命令安装wxGlade: ```shell pip install wxglade ``` 2.使用wxGlade创建GUI界面。打开wxGlade,选择“File”->“New”,选择“wx.Frame”作为顶级窗口,然后在“Attributes”选项卡中设置窗口的属性,例如标题、大小等。接下来,使用“Widgets”选项卡中的控件工具创建所需的控件,例如按钮、文本框等。最后,使用“Events”选项卡中的事件工具为控件添加事件处理程序。 3.使用wxPython将GUI界面与Python代码集成。在wxGlade中保存GUI界面文件,然后使用以下代码将其与Python代码集成: ```python import wx class MyFrame(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, id=wx.ID_ANY, title="My Title", pos=wx.DefaultPosition, size=wx.Size(500, 300), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.SetSizeHints(wx.DefaultSize, wx.DefaultSize) bSizer = wx.BoxSizer(wx.VERTICAL) self.m_button1 = wx.Button(self, wx.ID_ANY, u"MyButton", wx.DefaultPosition, wx.DefaultSize, 0) bSizer.Add(self.m_button1, 0, wx.ALL, 5) self.m_textCtrl1 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) bSizer.Add(self.m_textCtrl1, 0, wx.ALL, 5) self.SetSizer(bSizer) self.Layout() self.Centre(wx.BOTH) # Connect Events self.m_button1.Bind(wx.EVT_BUTTON, self.OnButton1Click) def __del__(self): pass # Virtual event handlers, overide them in your derived class def OnButton1Click(self, event): event.Skip() if __name__ == "__main__": app = wx.App(False) frame = MyFrame(None) frame.Show(True) app.MainLoop() ``` 在上面的代码中,我们创建了一个名为“MyFrame”的类,该类继承自wx.Frame类,并包含GUI界面中的所有控件。我们还为按钮添加了一个事件处理程序。 4.将Python代码与图书管理系统集成。在上面的代码中,我们可以添加图书管理系统的代码,例如查询图书、添加图书、删除图书等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值