写在开头:总结下现阶段我常用到wxpython控件的一些使用方法,便于记录和查询。
我一般是借助wxFormBuilder工具搭建基础的界面生成代码,这样做的好处自然是方便设计界面增加界面的美观度,再在.py文件手写代码设置控件的事件驱动,以此来完成GUI工具的开发。
wxFormBuilder工具的使用介绍可以查看本作者的文章:python借助wxFormBuilder工具搭建基础的GUI界面—wxFormBuilder工具使用介绍
下图是我常用的wxFormBuilder基础组件及wxpython中控件的方法。
1. TextCtrl文本框
1.1 单行文本框变多行文本框
默认TextCtrl控件是单行文本输入框的形式,要变成多行文本框即输入字符自动换行,需要设置TextCtrl支持多行文本显示。详情可以查看本作者的文章:wxpython控件TextCtrl如何显示多行文本。选择TextCtrl的style为“wxTE_MULTILIME"即设置TextCtrl为显示多行文本。
1.2 设置文本框显示内容及获取文本框内容
# 设置邮件发送的默认正文
self.m_textCtrl4.SetValue(mail_content)
mail_content = self.m_textCtrl4.GetValue()
1.3 文本框输入字数限制–最多只能输入多少字符
# 设置m_textCtrl4的字数不能超过50,不然弹出界面显示提醒用户self.m_textCtrl4.Bind(wx.EVT_TEXT_MAXLEN, self.reach_max_limit)def reach_max_limit(self, event):res = "输入字数超出了上限值:%s!" % 50toastone = wx.MessageDialog(None, "%s" % res, "信息提示",wx.YES_DEFAULT | wx.ICON_QUESTION)if toastone.ShowModal() == wx.ID_YES: # 如果点击了提示框的确定按钮toastone.Destroy() # 则关闭提示框
1.4 文本框支持“Enter”键入事件
当键盘按下“enter”按钮时textctrl文本框被触发执行相应的动作。详情可以查看本作者的文章:wxpython控件textctrl如何设置enter事件。textctrl的style选择wxTE_PROCESS_ENTER。
self.m_textCtrl25 = wx.TextCtrl(sbSizer3.GetStaticBox(), wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(600, -1),wx.TE_PROCESS_ENTER)# 设置文本框的enter事件,不点击查询按钮直接按enter就可以实现搜索功能
self.m_textCtrl25.Bind(wx.EVT_TEXT_ENTER, self.search_id_info)
1.5 文本框设置只读不允许修改
SetEditable()方法的输入参数为“False”即可实现文本框设置只读不允许修改。
self.m_textCtrl5.SetEditable(False)
2. Button按钮
2.1 使能按钮功能不可用
self.m_button25.Disable()
设置按钮Disable()之后,即使点击了按钮也不会触发按钮的事件。
2.2 设置按钮的触发事件
self.m_button29.Bind(wx.EVT_LEFT_DOWN, self.open_last_page) # 上一页
self.m_button30.Bind(wx.EVT_LEFT_DOWN, self.open_next_page) # 下一页
self.m_button28.Bind(wx.EVT_LEFT_DOWN, self.open_special_page) # 跳转页面
按钮的触发事件设置可以查看本作者的文章:
wxpython设计GUI:同一个按钮控件响应多个事件
wxpython设计GUI:grid控件实现显示表单数据功能,同时实现界面的上下翻页以及跳转功能
3. Choice单选框
3.1 改变Choice在界面上的选项显示
例如:查询依据我使用Choice控件来设置被选列表,但是界面使用一段时间后用户反馈一般他们都习惯按照“创建日期”来查询,而不是默认的第一个“单号”作为查询依据,那么就可以直接修改m_choice2控件SetSelection()方法的参数,将m_choice2在界面上的选项显示成“创建日期”,更符合用户操作需求贴合用户使用。
m_choice2Choices = [u"单号", u"需求描述", u"创建人", u"问题来源",u"项目状态", u"严重等级", u"流程状态", u"创建日期"]
self.m_choice2 = wx.Choice(sbSizer3.GetStaticBox(), wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, m_choice2Choices, 0)
self.m_choice2.SetSelection(7)
由上可知:通过SetSelection()方法可以设置打开界面时用户看到Choice控件当前显示的选项,这样就在不改变原始列表选项排列的情况下,将常用的被选项突出放在当前显示便于用户操作。
3.2 获取用户选择的选项
用户选中Choice控件的某个选项后,通过wx.EVT_CHOICE触发事件设置的函数来获取被选中的选项进行其他逻辑操作。通过GetString()方法获取具体的列表选项字符,而这个方法一般是和GetSelection()方法(获取被选中的是列表中的第几个索引)配合使用的。
# 查询依据
self.m_choice2.Bind(wx.EVT_CHOICE, self.show_calendar)def show_calendar(self, event):search_condition = self.m_choice2.GetString(self.m_choice2.GetSelection())if search_condition in ["创建日期"]:self.m_calendar1.Show()else:self.m_calendar1.Hide()
GetSelection()方法:
GetString()方法:
4. ComboxBox列表与本文组合框
ComboxBox控件的相关说明文档:https://docs.wxpython.org/wx.ComboBox.html?highlight=wx%20combobox#api-class-api
A combobox is like a combination of an edit control and a listbox.
4.1 限制ComboxBox控件的内容不能被用户修改
combobox控件与Choice控件的区别主要是Choice控件只能选择列表中的选项,而combobox控件还可以手动键入其他不在列表中的选项。使用combobox控件后为了防止用户键入其他不符合列表设置的选项而触发程序bug,一般使用SetEditable方法限制combobox控件的内容不能被用户修改。
# 限制特定控件的内容不能被用户修改
self.m_comboBox8.SetEditable(False) # 用户只能选择,不能编辑
4.2 控件初始化时设置好列表要显示的内容
通过设置combobox控件的choices属性,可以在打开界面时自动显示choices属性的列表选项。
m_comboBox8Choices = get_next_executor("管理")
self.m_comboBox8 = wx.ComboBox(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize,m_comboBox8Choices, 0)
4.3 先隐藏控件再设置控件应该显示的列表选项
除了初始化控件时就设置好combobox控件要显示的列表选项外,也可以先使用Hide()隐藏该控件,经过逻辑判断后使用SetItems方法设置combobox控件要显示的列表选项。
# 设置comboBox的items
self.m_comboBox11.Hide()
if page_name in ["项目管理记录_1", "项目管理记录_3", "项目管理记录_5"]:choice_list = ["返回开发", "关闭问题单", "提到新需求"]
elif page_name in ["项目管理记录_2", "项目管理记录_4", "项目管理记录_6"]:choice_list = ["回归测试", "关闭问题单", "提到新需求"]
elif page_name in ["项目管理记录_7"]:choice_list = ["关闭问题单", "提到新需求"]
else:# 项目管理记录choice_list = ["回归测试", "关闭问题单", "提到新需求"]
self.m_comboBox12.SetItems(choice_list)
5. HyperlinkCtrl链接控件
HyperlinkCtrl控件使用说明文档:https://docs.wxpython.org/wx.adv.HyperlinkCtrl.html?highlight=wx%20adv%20hyperlinkctrl#events-events-emitted-by-this-class
5.1 修改HyperlinkCtrl的触发事件
不设置HyperlinkCtrl控件触发事件的话,默认是用户点击HyperlinkCtrl控件后自动打开相应地址的文件。不好的地方是某些格式的文件可能无法直接打开,所以最好设置HyperlinkCtrl控件的触发事件将相应地址的文件复制到其他目录,用户再去新的目录打开该文件。
self.m_hyperlink16 = wx.adv.HyperlinkCtrl(self, wx.ID_ANY, u"wxFB Website", wx.EmptyString,wx.DefaultPosition, wx.DefaultSize, wx.adv.HL_DEFAULT_STYLE)# 设置链接控件的点击事件
self.Bind(wx.adv.EVT_HYPERLINK, self.download_file_5, self.m_hyperlink16)def download_file_5(self, event):src_path = self.m_hyperlink16.GetURL()download_file(src_path)
5.2 修改HyperlinkCtrl的标签名
HyperlinkCtrl控件的标签名默认是"wxFB Website"。为了界面的美观,一般先隐藏HyperlinkCtrl控件,用户上传文件后再显示HyperlinkCtrl控件,此时需要将HyperlinkCtrl控件的标签显示成刚用户上传的文件名称。
if regression_test_dict["回归测试上传附件"][i] != "wxFB Website":addr = os.path.join(id_path, regression_test_dict["回归测试上传附件"][i])if os.path.exists(addr):hyperlink_list[i].Show()hyperlink_list[i].SetURL(addr)hyperlink_list[i].SetLabel(regression_test_dict["回归测试上传附件"][i])else:hyperlink_list[i].Hide()
else:hyperlink_list[i].Hide()
查看全文
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/309717.html
如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!
相关文章:
常用的wxpython控件使用方法总结
写在开头:总结下现阶段我常用到wxpython控件的一些使用方法,便于记录和查询。
我一般是借助wxFormBuilder工具搭建基础的界面生成代码,这样做的好处自然是方便设计界面增加界面的美观度,再在.py文件手写代码设置控件的事件驱动&a……
构造函数、原型和实例的关系
构造函数、原型和实例的关系: 每个构造函数都有一个原型对象,原型有一个属性指回构造函数,而实例有一个内部指针指向原型。如果原型是另一个类型的实例呢?那就意味着这个原型本身有一个内部指针指向另一个原型,相应地另……
云原生 | Kubernetes – 资源指标管道
目录
Metrics API
度量资源用量
CPU
内存
Metrics 服务器 对于 Kubernetes,Metrics API 提供了一组基本的指标,以支持自动伸缩和类似的用例。 该 API 提供有关节点和 Pod 的资源使用情况的信息, 包括 CPU 和内存的指标。如果将 Metrics ……
JVS低代码基础介绍
企业信息化底座 JVS是面向软件开发团队可以快速实现应用的基础开发脚手架,主要定位于企业信息化通用底座,采用微服务分布式框架,提供丰富的基础功能,集成众多业务引擎,它灵活性强,界面化配置对开发者友好&a……
IDEA 注释模版
类的主注释
/*** description TODO* author Gaoxueyong* date ${DATE} ${TIME}* version 1.0*/方法的注释
1、创建自己的分组 选择右侧Template Group并输入名称 2、创建自己的模版 选择自己创建的分组然后选择Live Template 然后在Template text框内写入
*** $description……
Base64编码剖析
文章目录Base64编码概述Base64原理索引表如何转换?Java实操Java代码实现Base64参考文章Base64编码概述
百度百科中对Base64有一个很好的解释:“Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来……
华为OD机试真题 Python 实现【采样过滤】
目录
题目
思路
考点
Code 题目 在做物理实验时,为了计算物体移动的速率,通过相机等工具周期性的采样物体移动能离。由于工具故障,采样数据存在误差甚至相误的情况。需要通过一个算法过滤掉不正确的采样值,不同工具的故意模式存在差异,算法的各关门限会根据工具类型做……
const成员,流插入,流提取重载,初始化列表!(6千字长文详解!)
c详解之const成员,流插入,流提取重载,初始化列表! 文章目录c详解之const成员,流插入,流提取重载,初始化列表!<< 流插入 和 >> 流提取的重载解决共有成员函数问题链式访问……
强排式热水器
全部 答对 答错 第六版练习轻考试1(共50题,合计 500.0 分) 1.项目发起人向项目经理提出高层级项目需求。然后项目经理在制定项目管理计划之前,要求与一名主题专家(SME)进行访谈。根据这些信息,项目发起人使用的文件是……
LeetCode——Weekly Contest 321
这段时间经历了组会、开题、回家等等,这才发现周赛已经打到325场了,而我还没有写完321场的题解记录,真是汗颜啊。
LeetCode周赛第321场记录
这场周赛的题目相对比较简单一些,在此简单做个梳理: 这道题比较简单&#……
【Java开发】设计模式 12:解释器模式
1 解释器模式介绍
解释器模式是一种行为型设计模式,它提供了一种方法来解释语言、表达式或符号。
在该模式中,定义了一个表达式接口,并实现了对应的表达式类,这些类可以解释不同的符号组成的表达式,从而实现对语言的……
反序列化渗透与攻防(五)之shiro反序列化漏洞
Shiro反序列化漏洞
Shiro介绍
Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性
Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默……
vue2+vue3
vue2vue3尚硅谷vue2vue2 课程简介【02:24】vue2 Vue简介【17:59】vue2 Vue官网使用指南【14:07】vue2 搭建Vue开发环境【13:54】vue2 Hello小案例【22:25】了解: 不常用常用:id 更常用 简单class差值总结vue 实例vue 模板 : 先 取 ࿰……
【hello Linux】环境变量
目录 1. 环境变量的概念 2. 常见的环境变量 3. 查看环境变量 4. 和环境变量相关的命令 5. 环境变量的组织方式 6. 通过代码获取环境变量 7. 通过系统调用获取环境变量 Linux🌷 在开始今天的内容之前,先来看一幅图片吧! 不知道你们是否和我一……
【Linux基础】常用命令整理
ls命令
-a选项,可以展示隐藏的文件和文件夹-l选项,以列表形式展示内容-h,需要和-l搭配使用,可以展示文件的大小单位ls -lah等同于la -a -l -h
cd命令(change directory)
语法:cd [Linux路径]……
客快物流大数据项目(一百一十二):初识Spring Cloud
文章目录
初识Spring Cloud
一、Spring Cloud简介
二、SpringCloud 基础架构图…
C和C++中的struct有什么区别
区别一: C语言中: Struct是用户自定义数据类型(UDT)。 C语言中: Struct是抽象数据类型(ADT),支持成员函数的定义。
区别二:
C中的struct是没有权限设置的,……
docker的数据卷详解
数据卷 数据卷是宿主机中的一个目录或文件,当容器目录和数据卷目录绑定后,对方修改会立即同步
一个数据卷可以同时被多个容器同时挂载,一个容器也可以被挂载多个数据卷
数据卷作用:容器数据持久化 /外部机器和容器间接通信 /容器……
13、Qt生成dll-QLibrary方式使用
Qt创建dll,使用QLibrary类方式调用dll
一、创建项目
1、新建项目->其他项目->Empty qmake Project->Choose 2、输入项目名,选择项目位置,下一步 3、选择MinGW,下一步 4、完成 5、.pro中添加TEMPLATE subdirsÿ……
基于mapreduce 的 minHash 矩阵压缩
Minhash作用: 对大矩阵进行降维处理,在进行计算俩个用户之间的相似度。
比如: 俩个用户手机下载的APP的相似度,在一个矩阵中会有很多很多的用户要比较没俩个用户之间的相似度是一个很大的计算任务 如果首先对这个矩阵降维处理&am……
编程日记2023/4/16 14:50:37