5 Sleep 3天前 82次点击
留下做参考。
# wxPython 快速入门教程
## 1. 安装 wxPython
```python
# 安装 wxPython
# pip install wxPython
```
---
## 2. 第一个窗口
```python
# 导入 wxPython 模块
import wx
# 创建应用对象(程序引擎)
app = wx.App()
# 创建窗口(父窗口为 None,自动分配 ID,标题为 "First Window")
frame = wx.Frame(None, wx.ID_ANY, "First Window")
# 显示窗口
frame.Show()
# 进入主事件循环(保持窗口运行)
app.MainLoop()
```
---
## 3. 设置窗口大小和位置
```python
# 设置窗口大小和位置
import wx
app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "Window Size and Position")
# 设置窗口尺寸(宽400,高300)
frame.SetSize(400, 300)
# 设置窗口位置(距离屏幕左上角 (200, 200))
frame.SetPosition((200, 200))
frame.Show()
app.MainLoop()
```
---
## 4. 按钮与事件绑定
```python
# 按钮点击弹出消息框
import wx
# 定义按钮点击事件处理函数
def on_click(event):
wx.MessageBox("Button clicked!", "Info")
app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "Button Demo")
# 创建面板(用于放置控件)
panel = wx.Panel(frame)
# 创建按钮,标签为 "Click",位置 (50, 50)
btn = wx.Button(panel, label="Click", pos=(50, 50))
# 绑定按钮点击事件
btn.Bind(wx.EVT_BUTTON, on_click)
frame.Show()
app.MainLoop()
```
---
## 5. 多个按钮独立事件
```python
# 两个按钮各自响应不同消息
import wx
def on_button1(event):
wx.MessageBox("Button 1 Clicked", "Info")
def on_button2(event):
wx.MessageBox("Button 2 Clicked", "Info")
app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "Multiple Buttons")
panel = wx.Panel(frame)
# 创建两个按钮,位置不同
btn1 = wx.Button(panel, label="Button 1", pos=(50, 50))
btn2 = wx.Button(panel, label="Button 2", pos=(50, 100))
# 分别绑定不同的事件处理函数
btn1.Bind(wx.EVT_BUTTON, on_button1)
btn2.Bind(wx.EVT_BUTTON, on_button2)
frame.Show()
app.MainLoop()
```
---
## 6. 文本框(TextCtrl)
```python
# 创建文本框用于输入
import wx
app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "TextCtrl Demo")
panel = wx.Panel(frame)
# 创建文本框,位置 (50, 50),宽200,高25
text = wx.TextCtrl(panel, pos=(50, 50), size=(200, 25))
frame.Show()
app.MainLoop()
```
---
## 7. 静态文本(StaticText)
```python
# 显示不可编辑的标签
import wx
app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "StaticText Demo")
panel = wx.Panel(frame)
# 创建不可编辑的标签
label = wx.StaticText(panel, label="Hello wxPython", pos=(50, 50))
frame.Show()
app.MainLoop()
```
---
## 8. 动态改变标签文字
```python
# 点击按钮改变静态文本内容
import wx
# 点击按钮后修改标签文字
def change_label(event):
label.SetLabel("Button Clicked")
app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "Change Label")
panel = wx.Panel(frame)
# 初始标签
label = wx.StaticText(panel, label="Hello", pos=(50, 50))
# 按钮
btn = wx.Button(panel, label="Click Me", pos=(50, 80))
btn.Bind(wx.EVT_BUTTON, change_label)
frame.Show()
app.MainLoop()
```
---
## 9. 消息框(MessageBox)
```python
# 弹出消息框
import wx
app = wx.App()
# 弹出消息框,内容为 "Hello, this is a message box",标题 "Info"
wx.MessageBox("Hello, this is a message box", "Info")
app.MainLoop()
```
---
## 10. 复选框(CheckBox)
```python
# 复选框状态改变时弹出提示
import wx
def on_check(event):
# 根据复选框是否被选中弹出不同消息
if check.IsChecked():
wx.MessageBox("CheckBox is checked", "Info")
else:
wx.MessageBox("CheckBox is unchecked", "Info")
app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "CheckBox Demo")
panel = wx.Panel(frame)
# 创建复选框
check = wx.CheckBox(panel, label="I Agree", pos=(50, 50))
check.Bind(wx.EVT_CHECKBOX, on_check)
frame.Show()
app.MainLoop()
```
---
## 11. 单选按钮(RadioButton)
```python
# 单选按钮组,获取选中项
import wx
def on_radio(event):
# 获取当前选中的单选按钮标签
selected = radio1.GetLabel() if radio1.GetValue() else radio2.GetLabel()
wx.MessageBox(f"You selected {selected}", "Info")
app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "RadioButton Demo")
panel = wx.Panel(frame)
# 创建两个单选按钮,第一个使用 wx.RB_GROUP 表示分组开始
radio1 = wx.RadioButton(panel, label="Option 1", pos=(50, 50), style=wx.RB_GROUP)
radio2 = wx.RadioButton(panel, label="Option 2", pos=(50, 80))
# 绑定事件(两个按钮绑定同一个处理函数)
radio1.Bind(wx.EVT_RADIOBUTTON, on_radio)
radio2.Bind(wx.EVT_RADIOBUTTON, on_radio)
frame.Show()
app.MainLoop()
```
---
## 12. 组合框(ComboBox)
```python
# 下拉选择,显示选中项
import wx
def on_combo(event):
# 获取当前选中的条目
selected = combo.GetValue()
wx.MessageBox(f"You selected {selected}", "Info")
app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "ComboBox Demo")
panel = wx.Panel(frame)
options = ["Python", "Java", "C++", "Go"]
combo = wx.ComboBox(panel, choices=options, pos=(50, 50))
combo.Bind(wx.EVT_COMBOBOX, on_combo)
frame.Show()
app.MainLoop()
```
---
## 13. 滑块(Slider)
```python
# 滑块拖动时实时显示数值
import wx
def on_slider(event):
# 获取滑块当前数值,并更新标签显示
value = slider.GetValue()
label.SetLabel(str(value))
app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "Slider Demo")
panel = wx.Panel(frame)
# 滑块,范围 0-100,初始值 0
slider = wx.Slider(panel, value=0, minValue=0, maxValue=100, pos=(50, 50), size=(200, -1))
# 用于显示当前数值的静态文本
label = wx.StaticText(panel, label="0", pos=(50, 100))
slider.Bind(wx.EVT_SLIDER, on_slider)
frame.Show()
app.MainLoop()
```
---
## 14. 列表框(ListBox)
```python
# 列表选择,显示选中项
import wx
def on_listbox(event):
# 获取当前选中的列表项
selected = listbox.GetStringSelection()
wx.MessageBox(f"You selected {selected}", "Info")
app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "ListBox Demo")
panel = wx.Panel(frame)
options = ["Apple", "Banana", "Orange", "Grape"]
listbox = wx.ListBox(panel, choices=options, pos=(50, 50), size=(100, 100))
listbox.Bind(wx.EVT_LISTBOX, on_listbox)
frame.Show()
app.MainLoop()
```
---
## 15. 菜单栏(MenuBar)
```python
# 添加文件菜单,带退出功能
import wx
def on_exit(event):
# 关闭窗口,退出应用
frame.Close()
app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "MenuBar Demo")
# 创建菜单栏
menubar = wx.MenuBar()
# 创建文件菜单
file_menu = wx.Menu()
exit_item = file_menu.Append(wx.ID_EXIT, "Exit") # 添加“退出”项
menubar.Append(file_menu, "File") # 将文件菜单添加到菜单栏
frame.SetMenuBar(menubar)
# 绑定退出菜单项的点击事件
frame.Bind(wx.EVT_MENU, on_exit, exit_item)
frame.Show()
app.MainLoop()
```
---
## 16. 网格布局(GridSizer)
```python
# 使用网格布局器排列按钮
import wx
app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "GridSizer Demo")
panel = wx.Panel(frame)
# 创建 2x2 网格布局器,单元格间距 10 像素
sizer = wx.GridSizer(rows=2, cols=2, vgap=10, hgap=10)
# 添加四个按钮
for i in range(1, 5):
btn = wx.Button(panel, label=f"Button {i}")
sizer.Add(btn, 0, wx.EXPAND)
# 将布局器应用到面板
panel.SetSizer(sizer)
frame.Show()
app.MainLoop()
```
---
## 17. Box布局(BoxSizer)
```python
# 使用垂直和水平布局器嵌套
import wx
app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "BoxSizer Demo")
panel = wx.Panel(frame)
# 创建垂直和水平布局器
vbox = wx.BoxSizer(wx.VERTICAL)
hbox = wx.BoxSizer(wx.HORIZONTAL)
# 创建三个按钮
btn1 = wx.Button(panel, label="Button 1")
btn2 = wx.Button(panel, label="Button 2")
btn3 = wx.Button(panel, label="Button 3")
# 将前两个按钮放入水平布局器(等比例扩展,四周留5像素边距)
hbox.Add(btn1, 1, wx.EXPAND | wx.ALL, 5)
hbox.Add(btn2, 1, wx.EXPAND | wx.ALL, 5)
# 将水平布局器放入垂直布局器
vbox.Add(hbox, 1, wx.EXPAND | wx.ALL, 5)
# 将第三个按钮放入垂直布局器
vbox.Add(btn3, 1, wx.EXPAND | wx.ALL, 5)
panel.SetSizer(vbox)
frame.Show()
app.MainLoop()
```
---
## 总结
通过以上示例,我们已掌握了 wxPython 的基础知识:
- 创建窗口、设置大小位置
- 常用控件:按钮、文本框、静态文本、复选框、单选按钮、组合框、滑块、列表框
- 事件绑定与交互
- 菜单栏
- 布局管理器:GridSizer 和 BoxSizer
利用这些内容,我们可以开始构建功能完整的桌面应用程序。如果需要进一步深入学习,可以查阅 wxPython 官方文档。
| Python,创建一个简单的脚本,将文本输出到屏幕上。 |
收藏