
wxPython:引用、展示图片、Stock IDs、操作剪切板、拖拽
Top-Level Windows (Frames 和 Dialogs):最顶层的窗口组件,可以包含任意数量的子控件。 General Containers (Panels 和 Notebooks 等):容器控件,可以嵌套多个子控件。 Controls (Buttons, CheckBoxes, ComboBoxes 等):具体的用户界面组件。
发布日期:2021-05-08 01:20:56
浏览次数:10
分类:精选文章
本文共 2925 字,大约阅读时间需要 9 分钟。
wxPython 编程基础 - 掌握 App 与 Window 的引用
App 的配置与创建
在 wxPython 开发中,wx.App
是应用程序的核心对象。其构造函数的参数配置如下:
wx.App(redirect=True, filename=None, useBestVisual=False, clearSigInt=True)
- redirect:决定是否重定向标准输出。
- filename:在
redirect
为 True 时,指定重定向的文件名。 - useBestVisual:决定应用程序是否尝试使用最佳视觉设置。
- clearSigInt:决定是否清除 SIGINT 信号。
一般情况下,wx.App
的默认设置已经足够使用,但在某些场景下(如需要保留终端输入或输出),可以根据需要进行调整。
Window 的层级结构
wx 中的控件分为三大类:
这些控件之间的层级关系可以通过以下方法获取:
- GetChildren():获取当前控件的所有子控件。
- FindWindowById():通过控件 ID 查找特定子控件。
- GetParent():获取控件的父控件。
App 与 Window 的关系
在 wx 应用程序中,wx.GetApp()
可以获取应用程序对象。通过 GetTopWindow()
方法,可以获取应用程序的顶级窗口。
# 获取应用程序对象app = wx.GetApp()# 获取主窗口main_frame = app.GetTopWindow()
通过这种方式,可以轻松地在应用程序中访问和操作任何窗口。
实用引用方法
在 wx 开发中,掌握以下引用方法是必不可少的:
- wx.FindWindowByLabel(label):通过 Label 文本查找子控件。
- wx.FindWindowByName(name):通过控件名查找子控件。
- wx.GetTopLevelParent():获取顶级窗口。
通过这些方法,可以快速定位和操作特定控件,显著提升开发效率。
剪切板操作
使用剪切板功能,可以实现数据的复制与粘贴。以下是常用的函数接口:
def SetClipboardText(text): """将文本数据添加到剪切板""" data_obj = wx.TextDataObject() data_obj.SetText(text) if wx.TheClipboard.IsOpened() or wx.TheClipboard.Open(): wx.TheClipboard.SetData(data_obj) wx.TheClipboard.Close()def GetClipboardText(): """从剪切板获取文本数据""" text_obj = wx.TextDataObject() rtext = "" if wx.TheClipboard.IsOpened() or wx.TheClipboard.open(): if wx.TheClipboard.GetData(text_obj): rtext = text_obj.GetText() wx.TheClipboard.Close() return rtext
使用方法
打开剪切板:
wx.TheClipboard.Open()
设置剪切板数据:
SetClipboardText("文本内容")
获取剪切板数据:
text = GetClipboardText()
拖拽功能
实现拖拽功能,需要定义一个 PyDropTarget
类继承自 wx.PyDropTarget
。以下是一个简单的实现示例:
class FileAndTextDropTarget(wx.PyDropTarget): def __init__(self, file_callback, text_callback): super().__init__() self.f_callback = file_callback self.t_callback = text_callback self.data = wx.DataObjectComposite() self.text_data = wx.TextDataObject() self.file_data = wx.FileDataObject() self.data.Add(self.text_data) self.data.Add(self.file_data, True) self.SetDataObject(self.data) def OnData(self, x_pos, y_pos, drag_result): if self.data is not None: format = self.data.GetReceivedFormat() if format.type == wx.DF_FILENAME: self.f_callback(self.file_data.GetFilenames()) else: self.t_callback(self.text_data.GetText()) return drag_result
使用方法
在窗口中设置拖拽目标:
dt = FileAndTextDropTarget(on_file_drop, on_text_drop)list_ctrl.SetDropTarget(dt)
处理拖拽事件:
def on_file_drop(files): PushStatusText("文件被拖拽成功") for f in files: Append(f)def on_text_drop(text): PushStatusText("文本被拖拽成功") Append(text)
总结
通过以上方法,可以全面掌握 wxPython 中的应用程序与窗口的引用方式。从 App
到 Window
,从简单的剪切板到复杂的拖拽功能,wxPython 提供了丰富的 API 和工具,帮助开发者高效完成 GUI 开发任务。
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月15日 00时17分31秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
python_遍历操作
2019-03-05
天池大赛o2o优惠券第一名代码解读_xgboost方式
2019-03-05
Web基础应用 NFS服务基础 触发挂载
2019-03-05
DNS服务基础 特殊解析 DNS主从架构 DNS子域授权 DNS查询
2019-03-05
python_透视表操作unstack
2019-03-05
端口列表_端口占用问题解决kill_ps_net
2019-03-05
create-react-app路由的实现原理
2019-03-05
PSI值
2019-03-05
lift曲线
2019-03-05
海思Hi3531DV100开发环境搭建
2019-03-05
Xilinx Zynq pl353-nand使用
2019-03-05
JavaScript上传下载文件
2019-03-05
QWaitCondition把异步调用封装成同步调用
2019-03-05
windows驱动开发-编译错误集合
2019-03-05
Linux驱动开发之PCIe Host驱动
2019-03-05
Vue.js Element Basic组件使用
2019-03-05
android MVP模式
2019-03-05
android 头像选择,裁剪全套解决方案,你值得拥有!
2019-03-05
MapReduce
2019-03-05