PythonwxPython基础 【wxPython 基础 —— wx.App / wx.Frame / wx.Panel / 控件与 Sizer】# 本示例演示 wxPython 的核心概念应用程序、窗口、面板、常用控件和布局管理import wx# ---------- 自定义窗口类 ----------class MainFrame(wx.Frame):继承 wx.Frame 创建主窗口包含菜单、面板和各种控件def __init__(self):# 调用父类构造parentNone, idwx.ID_ANY, title...super().__init__(parentNone, idwx.ID_ANY,titlewxPython 基础窗口演示,size(700, 500),stylewx.DEFAULT_FRAME_STYLE)# 设置窗口图标可使用 .ico 文件# self.SetIcon(wx.Icon(app.ico))# ---- 1. 创建面板 (Panel) ----# wxPython 中所有控件必须放在 Panel 上除了 Frame 本身panel wx.Panel(self, wx.ID_ANY)# ---- 2. 使用 BoxSizer 进行布局管理 ----# 主垂直布局main_sizer wx.BoxSizer(wx.VERTICAL)# ---- 3. 静态文本 (StaticText) ----title_text wx.StaticText(panel, wx.ID_ANY,labelwxPython 基础控件演示,stylewx.ALIGN_CENTER)# 设置字体font wx.Font(16, wx.FONTFAMILY_DEFAULT,wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD)title_text.SetFont(font)main_sizer.Add(title_text, flagwx.ALL | wx.EXPAND, border10)# ---- 4. 文本输入框 (TextCtrl) ----# 创建一个带标签的水平布局name_sizer wx.BoxSizer(wx.HORIZONTAL)name_label wx.StaticText(panel, wx.ID_ANY, 姓名:)name_sizer.Add(name_label, flagwx.ALIGN_CENTER_VERTICAL | wx.RIGHT,border5)self.text_name wx.TextCtrl(panel, wx.ID_ANY,value张三,stylewx.TE_PROCESS_ENTER)name_sizer.Add(self.text_name, proportion1, flagwx.EXPAND)main_sizer.Add(name_sizer, flagwx.ALL | wx.EXPAND, border5)# ---- 5. 多行文本输入框 ----multi_sizer wx.BoxSizer(wx.HORIZONTAL)multi_label wx.StaticText(panel, wx.ID_ANY, 简介:)multi_sizer.Add(multi_label, flagwx.ALIGN_TOP | wx.RIGHT, border5)self.text_multi wx.TextCtrl(panel, wx.ID_ANY,value这是一个多行文本输入框...,stylewx.TE_MULTILINE | wx.TE_WORDWRAP)multi_sizer.Add(self.text_multi, proportion1, flagwx.EXPAND)main_sizer.Add(multi_sizer, proportion1, flagwx.ALL | wx.EXPAND,border5)# ---- 6. 按钮 (Button) ----btn_sizer wx.BoxSizer(wx.HORIZONTAL)btn_hello wx.Button(panel, wx.ID_ANY, label点击问候)btn_hello.Bind(wx.EVT_BUTTON, self.on_hello)btn_sizer.Add(btn_hello, flagwx.RIGHT, border5)btn_clear wx.Button(panel, wx.ID_ANY, label清空)btn_clear.Bind(wx.EVT_BUTTON, self.on_clear)btn_sizer.Add(btn_clear, flagwx.RIGHT, border5)btn_exit wx.Button(panel, wx.ID_ANY, label退出)btn_exit.Bind(wx.EVT_BUTTON, lambda e: self.Close(True))btn_sizer.Add(btn_exit)main_sizer.Add(btn_sizer, flagwx.ALL | wx.ALIGN_CENTER, border10)# ---- 7. 状态信息标签 ----self.status_text wx.StaticText(panel, wx.ID_ANY,label就绪,stylewx.ALIGN_CENTER)main_sizer.Add(self.status_text, flagwx.ALL | wx.EXPAND, border5)# ---- 8. 将布局设置到面板 ----panel.SetSizer(main_sizer)# ---- 9. 创建菜单栏 ----self._create_menu()# ---- 10. 创建状态栏 ----self.CreateStatusBar()self.SetStatusText(欢迎使用 wxPython)# 居中显示self.Center()def _create_menu(self):创建菜单栏menubar wx.MenuBar()# 文件菜单file_menu wx.Menu()item_open file_menu.Append(wx.ID_OPEN, 打开(O)\tCtrlO)item_save file_menu.Append(wx.ID_SAVE, 保存(S)\tCtrlS)file_menu.AppendSeparator()item_exit file_menu.Append(wx.ID_EXIT, 退出(Q)\tCtrlQ)# 绑定菜单事件self.Bind(wx.EVT_MENU, lambda e: self.SetStatusText(打开文件...),item_open)self.Bind(wx.EVT_MENU, lambda e: self.SetStatusText(保存文件...),item_save)self.Bind(wx.EVT_MENU, lambda e: self.Close(True), item_exit)# 帮助菜单help_menu wx.Menu()item_about help_menu.Append(wx.ID_ABOUT, 关于(A))self.Bind(wx.EVT_MENU, lambda e: wx.MessageBox(wxPython 基础示例 v1.0, 关于), item_about)menubar.Append(file_menu, 文件(F))menubar.Append(help_menu, 帮助(H))self.SetMenuBar(menubar)# ---------- 事件处理函数 ----------def on_hello(self, event):点击问候按钮的事件处理name self.text_name.GetValue()if not name.strip():name 匿名用户message f你好{name}欢迎学习 wxPython。# 弹出对话框wx.MessageBox(message, 问候, wx.OK | wx.ICON_INFORMATION)self.SetStatusText(f已向 {name} 发送问候)self.status_text.SetLabel(f最后操作: 问候 {name})def on_clear(self, event):点击清空按钮的事件处理self.text_name.Clear()self.text_multi.Clear()self.SetStatusText(已清空输入框)self.status_text.SetLabel(最后操作: 清空)# ---------- 应用程序类 ----------class MyApp(wx.App):继承 wx.App 自定义应用程序类def OnInit(self):应用程序初始化——在此创建主窗口frame MainFrame()frame.Show(True)return True # 返回 False 则程序退出# ---------- 入口 ----------if __name__ __main__:# 创建应用程序实例并启动事件循环app MyApp()app.MainLoop()