wxPython基础:添加对象、子窗口及使用对话框
立即解锁
发布时间: 2025-08-17 02:03:57 阅读量: 3 订阅数: 15 


wxPython in Action:GUI开发的利器
### wxPython 基础:添加对象、子窗口及使用对话框
#### 1. 向框架添加对象和子窗口
在创建 `wx.Frame` 对象后,为了让这些框架更具实用性,我们需要在其中添加额外的小部件。下面将介绍如何向框架中添加对象和子窗口。
##### 1.1 添加小部件到框架
以 `InsertFrame` 类为例,它是 `wx.Frame` 的子类,用于演示向框架中插入元素的基本操作。以下是 `InsertFrame` 类的代码:
```python
#!/usr/bin/env python
import wx
class InsertFrame(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self, parent, id, 'Frame With Button',
size=(300, 100))
panel = wx.Panel(self)
button = wx.Button(panel, label="Close", pos=(125, 10),
size=(50, 50))
self.Bind(wx.EVT_BUTTON, self.OnCloseMe, button)
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
def OnCloseMe(self, event):
self.Close(True)
def OnCloseWindow(self, event):
self.Destroy()
if __name__ == '__main__':
app = wx.PySimpleApp()
frame = InsertFrame(parent=None, id=-1)
frame.Show()
app.MainLoop()
```
在 `InsertFrame` 类的 `__init__` 方法中,创建了两个子窗口:
- `wx.Panel`:它是一个普通的容器,用于容纳其他窗口,自身功能较少。
- `wx.Button`:一个普通的按钮。
接着,将按钮的点击事件和窗口关闭事件绑定到相应的处理函数上。
在大多数情况下,我们会创建一个与 `wx.Frame` 大小相同的 `wx.Panel` 实例,用于容纳框架的所有内容。这样做可以将窗口的自定义内容与工具栏和状态栏等其他元素分开。此外,在 Windows 操作系统上,`wx.Frame` 的默认背景颜色是灰色,而 `wx.Panel` 的默认背景颜色是白色(假设未更改系统的颜色和主题设置)。而且,`wx.Panel` 类支持通过 `Tab` 键遍历其内部元素,而 `wx.Frame` 则不支持。
在 `wxPython` 中,向父窗口插入子窗口时,不需要显式调用 `add` 方法,只需在创建子窗口时指定其父窗口,子窗口就会隐式添加到父对象中。
如果框架只有一个子窗口,该子窗口(如 `wx.Panel`)会自动调整大小以填充框架的客户区,这会覆盖为子窗口指定的任何位置或大小信息。而按钮是面板的子窗口,所以其指定的大小和位置会被使用。如果未为按钮指定大小和位置,它将被放置在面板的左上角,大小根据标签长度确定。
为每个子窗口显式指定大小和位置会很繁琐,而且当用户调整窗口大小时,应用程序无法优雅地重新定位对象。为了解决这些问题,`wxPython` 使用 `sizers` 对象来管理子窗口的复杂布局。
下面是添加小部件到框架的流程图:
```mermaid
graph TD;
A[创建 wx.Frame] --> B[创建 wx.Panel];
B --> C[创建 wx.Button];
C --> D[绑定按钮点击事件];
D --> E[绑定窗口关闭事件];
```
##### 1.2 添加菜单栏、工具栏或状态栏到框架
应用程序窗口通常会有菜单栏、工具栏和状态栏这三个特殊的子窗口。`wxPython` 提供了创建工具栏和状态栏的快捷方法,创建菜单也并不困难。以下是 `ToolbarFrame` 类的代码,用于演示如何为普通窗口添加这三个子窗口:
```python
#!/usr/bin/env python
import wx
import images
class ToolbarFrame(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self, parent, id, 'Toolbars',
size=(300, 200))
panel = wx.Panel(self)
panel.SetBackgroundColour('White')
statusBar = self.CreateStatusBar()
toolbar = self.CreateToolBar()
toolbar.AddSimpleTool(wx.NewId(), images.getNewBitmap(),
"New", "Long help for 'New'")
toolbar.Realize()
menuBar = wx.MenuBar()
menu1 = wx.Menu()
menuBar.Append(menu1, "&File")
menu2 = wx.Menu()
menu2.Append(wx.NewId(), "&Copy", "Copy in status bar")
menu2.Append(wx.NewId(), "C&ut", "")
menu2
```
0
0
复制全文
相关推荐










