我的编程空间,编程开发者的网络收藏夹
学习永远不晚

wxPython中wx.gird.Gird添加按钮如何实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

wxPython中wx.gird.Gird添加按钮如何实现

这篇文章主要介绍了wxPython中wx.gird.Gird添加按钮如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇wxPython中wx.gird.Gird添加按钮如何实现文章都会有所收获,下面我们一起来看看吧。

实现效果图如下:

wxPython中wx.gird.Gird添加按钮如何实现

本文基于wxPython 4.2.0版本上开发。需要特别注意,wxPython版本之间基础库的差异巨大。

wx.gird.Gird表格中添加按钮,共分为三部

第一步、使用GridCellRenderer与GridCellEditor派生出表格安置button控件的渲染器与编辑
第二步、wx.gird.Gird表格创建,添加按钮与事件响应
第三步、调试代码与测试功能

1、派生按钮渲染器与按钮编辑器

首先我们需要先实现在两个类,一个是单元格渲染器(wx.grid.GridCellRenderer)派生渲染按钮,一个单元格编辑器(wx.grid.GridCellEditor)派生编辑按钮

代码如下:

import wx.gridclass ButtonRenderer(wx.grid.GridCellRenderer):    def __init__(self, button):        wx.grid.GridCellRenderer.__init__(self)  # 初始化GridCellRenderer基类        self.button = button    def Draw(self, grid, attr, dc, rect, row, col, isSelected):        self.button.SetSize(rect)  # 设置按钮大小为单元格大小        state = wx.CONTROL_SELECTED if isSelected else wx.CONTROL_CURRENT  # 设置按钮状态        bmp = wx.Bitmap(rect.width, rect.height)  # 创建一个和单元格大小相同的位图        dc2 = wx.MemoryDC(bmp)  # 创建一个内存设备上下文,用于在位图上绘制        wx.RendererNative.Get().DrawPushButton(self.button, dc2, (0, 0, rect.width, rect.height), state)  # 在位图上绘制按钮        dc.Blit(rect.x, rect.y, rect.width, rect.height, dc2, 0, 0, wx.COPY, True)  # 将位图复制到单元格上,覆盖原有的内容        # 在单元格中绘制标签        label = grid.GetTable().GetValue(row, col)  # 获取单元格的值        dc.DrawLabel(label, rect, wx.ALIGN_CENTER)  # 在单元格中居中绘制标签class ButtonEditor(wx.grid.GridCellEditor):    def __init__(self, button):        wx.grid.GridCellEditor.__init__(self)  # 初始化GridCellEditor基类        self.button = button        self.SetControl(button)    def Create(self, parent, id, evtHandler):        pass    def BeginEdit(self, row, col, grid):        pass    def EndEdit(self, row, col, grid, oldVal):        pass
  • 这段代码是用于创建一个在表格单元格中显示按钮的自定义表格单元格渲染器(ButtonRenderer)和单元格编辑器(ButtonEditor)。

  • ButtonRenderer的功能是在表格单元格中绘制按钮。它接收一个wx.Button实例,然后在表格单元格内绘制按钮和标签。它重载了Draw方法,该方法接收单元格的位置、大小、单元格的行列信息等参数,通过调用wx.RendererNative.Get().DrawPushButton方法来绘制按钮,然后在单元格中绘制标签。

  • ButtonEditor是用于允许用户编辑表格单元格中的按钮的单元格编辑器。它接收一个wx.Button实例,并在单元格中显示该按钮。它重载了Create、BeginEdit、EndEdit,其中Create方法负责创建一个窗口控件来表示单元格中的编辑器,BeginEdit方法在用户开始编辑单元格时被调用,EndEdit方法在用户完成编辑时被调用

2、表格实现

按照前言的样式,我们需要实现一个3x3的表格
内容是 Name, Age,按钮
使用wx.gird.Gird来实现,按钮部分会使用上面派生的两个类

具体代码如下:

import wximport wx.grid# 定义一个包含姓名和年龄的列表,后面作为列表的数据pn = [['张三', '18'],        ['李四', '21'],        ['王五', '39']]# 定义一个继承自 wx.grid.Grid 的类 MyGridclass MyGrid(wx.grid.Grid):    def __init__(self, parent):                # 调用 wx.grid.Grid 的初始化函数        wx.grid.Grid.__init__(self, parent, -1)        # 创建一个 3 行 3 列的网格        self.CreateGrid(3, 3)        # 设置第一列的标题为 "Name"        self.SetColLabelValue(0, "Name")        # 设置第二列的标题为 "Age"        self.SetColLabelValue(1, "Age")        # 设置第三列为空,即没有标题        self.SetColLabelValue(2, "")        # 在第3列的每一行中添加一个按钮        for i in range(self.GetNumberRows()):            #将第一列  Name  与 第二列 Age 填充 姓名与年龄            self.SetCellValue(i, 0, pn[i][0])            self.SetCellValue(i, 1, pn[i][1])                                       btn = wx.Button(self, id=i, label="Delete")   # 创建一个名为 "Delete" 的按钮,并绑定到 id=i 上                        #这两行用上了前面派生的类            self.SetCellRenderer(i, 2, ButtonRenderer(btn))  # 在第 i 行的第 2 列中设置单元格渲染器为 ButtonRenderer(btn)            self.SetCellEditor(i, 2, ButtonEditor(btn))   # 在第 i 行的第 2 列中设置单元格编辑器为 ButtonEditor(btn)                                    self.SetCellValue(i, 2, "Delete")    # 在第 i 行的第 2 列中设置单元格值为 "Delete"  ,这一句没有,会有显示缺陷,可自            btn.Bind(wx.EVT_BUTTON, self.OnDeleteButtonClick)  # 给按钮绑定一个事件处理函数 OndeletePlan    # 定义一个按钮点击事件处理函数    def OnDeleteButtonClick(self, event):        # 获取按钮所在的单元格的行号,其实是按钮的ID编号        row = event.GetId()            # 获取单元格编辑器中的按钮        aa: wx.Button = self.GetCellEditor(row, 2).button        # 解除按钮的事件绑定,这个事件不解除,无法删除这一行数据        aa.Unbind(wx.EVT_BUTTON)        # 删除该行        self.DeleteRows(row)

3、编辑调试代码:

调试代码如下:

    class MyFrame(wx.Frame):        def __init__(self):            wx.Frame.__init__(self, None, title="My Grid")            # 创建一个MyGrid对象, 上面实现的            self.grid = MyGrid(self)            sizer = wx.BoxSizer(wx.VERTICAL)            sizer.Add(self.grid, 1, wx.EXPAND | wx.ALL, 5)            self.SetSizer(sizer)            self.Fit()    # 运行标配    if __name__ == "__main__":        frame = MyFrame()        frame.Show()        app.MainLoop()

wxPython中wx.gird.Gird添加按钮如何实现

4、完整可运行代码

下面贴出完整的代码

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2023/3/16 22:44# @Author  : 魂尾# @File    : 05在gird中添加删除按钮.py# @Description : 一个3x3的表格,可以通过Delete按钮删除对应行import wximport wx.grid# 定义一个包含姓名和年龄的列表,后面作为列表的数据pn = [['张三', '18'],      ['李四', '21'],      ['王五', '39']]class ButtonRenderer(wx.grid.GridCellRenderer):    def __init__(self, button):        wx.grid.GridCellRenderer.__init__(self)  # 初始化GridCellRenderer基类        self.button = button    def Draw(self, grid, attr, dc, rect, row, col, isSelected):        self.button.SetSize(rect)  # 设置按钮大小为单元格大小        state = wx.CONTROL_SELECTED if isSelected else wx.CONTROL_CURRENT  # 设置按钮状态        bmp = wx.Bitmap(rect.width, rect.height)  # 创建一个和单元格大小相同的位图        dc2 = wx.MemoryDC(bmp)  # 创建一个内存设备上下文,用于在位图上绘制        wx.RendererNative.Get().DrawPushButton(self.button, dc2, (0, 0, rect.width, rect.height), state)  # 在位图上绘制按钮        dc.Blit(rect.x, rect.y, rect.width, rect.height, dc2, 0, 0, wx.COPY, True)  # 将位图复制到单元格上,覆盖原有的内容        # 在单元格中绘制标签        label = grid.GetTable().GetValue(row, col)  # 获取单元格的值        dc.DrawLabel(label, rect, wx.ALIGN_CENTER)  # 在单元格中居中绘制标签class ButtonEditor(wx.grid.GridCellEditor):    def __init__(self, button):        wx.grid.GridCellEditor.__init__(self)  # 初始化GridCellEditor基类        self.button = button        self.SetControl(button)    def Create(self, parent, id, evtHandler):        pass    def BeginEdit(self, row, col, grid):        pass    def EndEdit(self, row, col, grid, oldVal):        pass# 定义一个继承自 wx.grid.Grid 的类 MyGridclass MyGrid(wx.grid.Grid):    def __init__(self, parent):        # 调用 wx.grid.Grid 的初始化函数        wx.grid.Grid.__init__(self, parent, -1)        # 创建一个 3 行 3 列的网格        self.CreateGrid(3, 3)        # 设置第一列的标题为 "Name"        self.SetColLabelValue(0, "Name")        # 设置第二列的标题为 "Age"        self.SetColLabelValue(1, "Age")        # 设置第三列为空,即没有标题        self.SetColLabelValue(2, "")        # 在第3列的每一行中添加一个按钮        for i in range(self.GetNumberRows()):            # 将第一列  Name  与 第二列 Age 填充 姓名与年龄            self.SetCellValue(i, 0, pn[i][0])            self.SetCellValue(i, 1, pn[i][1])            btn = wx.Button(self, id=i, label="Delete")  # 创建一个名为 "Delete" 的按钮,并绑定到 id=i 上            # 这两行用上了前面派生的类            self.SetCellRenderer(i, 2, ButtonRenderer(btn))  # 在第 i 行的第 2 列中设置单元格渲染器为 ButtonRenderer(btn)            self.SetCellEditor(i, 2, ButtonEditor(btn))  # 在第 i 行的第 2 列中设置单元格编辑器为 ButtonEditor(btn)            self.SetCellValue(i, 2, "Delete")  # 在第 i 行的第 2 列中设置单元格值为 "Delete"  ,这一句没有,会有显示缺陷,可自            btn.Bind(wx.EVT_BUTTON, self.OnDeleteButtonClick)  # 给按钮绑定一个事件处理函数 OndeletePlan    # 定义一个按钮点击事件处理函数    def OnDeleteButtonClick(self, event):        # 获取按钮所在的单元格的行号,其实是按钮的ID编号        row = event.GetId()        # 获取单元格编辑器中的按钮        aa: wx.Button = self.GetCellEditor(row, 2).button        # 解除按钮的事件绑定,这个事件不解除,无法删除这一行数据        aa.Unbind(wx.EVT_BUTTON)        # 删除该行        self.DeleteRows(row)class MyFrame(wx.Frame):    def __init__(self):        wx.Frame.__init__(self, None, title="My Grid")        self.grid = MyGrid(self)        sizer = wx.BoxSizer(wx.VERTICAL)        sizer.Add(self.grid, 1, wx.EXPAND | wx.ALL, 5)        self.SetSizer(sizer)        self.Fit()if __name__ == "__main__":    app = wx.App()    frame = MyFrame()    frame.Show()    app.MainLoop()

关于“wxPython中wx.gird.Gird添加按钮如何实现”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“wxPython中wx.gird.Gird添加按钮如何实现”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

wxPython中wx.gird.Gird添加按钮如何实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

wxPython中wx.gird.Gird添加按钮如何实现

这篇文章主要介绍了wxPython中wx.gird.Gird添加按钮如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇wxPython中wx.gird.Gird添加按钮如何实现文章都会有所收获,下面我们一起
2023-07-05

wxPython中wx.gird.Gird添加按钮的实现

本文主要介绍了wxPython中wx.gird.Gird添加按钮的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-19

android studio如何添加按钮

在Android Studio中添加按钮,可以通过以下步骤进行操作:1. 打开Android Studio,创建或打开一个项目。2. 在项目的布局文件(通常是`activity_main.xml`)中找到你想要添加按钮的位置。3. 在布局文
2023-10-08

WinForm中如何添加一个按钮控件

要在WinForm中添加一个按钮控件,可以按照以下步骤操作:打开Visual Studio并创建一个新的WinForm项目。打开窗体设计器,在工具箱中找到按钮控件(通常是一个带有“Button”标签的按钮图标)。将按钮控件拖动到窗体上的
WinForm中如何添加一个按钮控件
2024-03-12

Dreamweaver中banner两侧的按钮如何添加

这篇文章给大家分享的是有关Dreamweaver中banner两侧的按钮如何添加的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Dreamweaver网页中的banner图片需要切换,我们可以添加按钮来切换图片。操
2023-06-08

Unity 按钮如何添加OnClick事件

这篇文章主要讲解了“Unity 按钮如何添加OnClick事件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Unity 按钮如何添加OnClick事件”吧!1、在Hierarchy面板右键U
2023-06-14

Android 6.0开发中如何实现关机菜单添加重启按钮

小编给大家分享一下Android 6.0开发中如何实现关机菜单添加重启按钮,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!本文实例讲述了Android 6.0开发实现关机菜单添加重启按钮的方法。分享给大家供大家参考,具体如下
2023-05-30

如何给Android中的按钮添加图片功能

在layout中建一个my_login.xml文件 代码如下 2022-06-06

Android如何给按钮添加点击音效

有很多制作精良的APP都自带点击音效,那么如何简单的来实现这一效果,这里需要使用到的一个概念叫做SoundPool,这个类主要用于播放一些比较小的音频文件,因为比较方便,通常用在游戏里比较多。 代码闲话不多说,我们现在需要做一个功能,就是点
2022-06-06

如何在Android应用中添加一个按钮功能

这期内容当中小编将会给大家带来有关如何在Android应用中添加一个按钮功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、首先创建一个按钮
2023-05-31

纯CSS如何实现数字加减按钮

这篇文章将为大家详细讲解有关纯CSS如何实现数字加减按钮,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言:对于数字加减按钮的实现,以前用过不少方案,诸如:1.使用背景图片——这种
2023-06-08

Dreamweaver按钮如何添加立体阴影效果

这篇文章主要介绍Dreamweaver按钮如何添加立体阴影效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果图:1、首先用DW制作一个按钮,可以参考下方引用经验来制作。2、然后我们在按钮样式中添加一个投影的代码【
2023-06-08

详解Java如何给按钮添加监视器

这篇文章主要介绍了详解Java如何给按钮添加监视器,使用匿名对象、实现接口、实现类、Lambda表达式、注解等,需要的朋友可以参考下
2023-05-14

iOS11应用视图中如何使用代码添加按钮

这篇文章主要介绍了iOS11应用视图中如何使用代码添加按钮,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。由于使用编辑界面添加视图的方式比较简单,所以不在介绍。这里,直接讲解代
2023-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录