# 创建按钮2、3 self.button2 = wx.Button(self, label="导入数据") self.button2.Bind(wx.EVT_BUTTON, self.on_button2_click) self.button3 = wx.Button(self, label="查看结果") self.button3.Bind(wx.EVT_BUTTON, self.on_button3_click)报错 self.button3.Bind(wx.EVT_BUTTON, self.on_button3_click) AttributeError: 'MyFrame' object has no attribute 'on_button3_click' OnInit returned false, exiting...

时间: 2023-11-28 14:50:15 浏览: 35
这个错误提示说明在 `MyFrame` 类中没有定义 `on_button3_click` 方法。您需要在 `MyFrame` 类中定义 `on_button3_click` 方法,以便在按钮被点击时执行相应的操作。您可以像这样定义该方法: ``` def on_button3_click(self, event): # 执行按钮3被点击时的操作 ``` 然后,将该方法绑定到按钮3的 `EVT_BUTTON` 事件上,就像您绑定按钮2的方法一样: ``` self.button3.Bind(wx.EVT_BUTTON, self.on_button3_click) ``` 如果您已经定义了 `on_button3_click` 方法,但仍然收到此错误消息,则可能是因为该方法名称与您在绑定事件时使用的名称不匹配。请确保方法名称正确拼写并匹配绑定事件时使用的名称。
相关问题

# coding=utf-8 # 文件位置: code\cho13\ch13_8_4.py import wx class MyFrame(wx.Frame): def __init__(self): super().__init__(None, title='静态图片控制', size=(300, 300)) self.panel = wx.Panel(parent=self) self.bmps = [wx.Bitmap('images/3.jpg', wx.BITMAP_TYPE_JPG), wx.Bitmap('images/4.jpg', wx.BITMAP_TYPE_JPG), wx.Bitmap('images/1.webp', wx.BITMAP_TYPE_WEBP)] b1 = wx.Button(self.panel, id=1, label='Button1') b2 = wx.Button(self.panel, id=1, label='Button2') self.Bind(wx.EVT_BUTTON, self.on_click, id=1, id2=2) self.image = wx.StaticBitmap(self.panel, bitmap=self.bmps[0]) vbox = wx.BoxSizer(wx.VERTICAL) vbox.Add(b1, proportion=1, flag=wx.EXPAND) vbox.Add(b2, proportion=1, flag=wx.EXPAND) vbox.Add(self.image, proportion=3, flag=wx.EXPAND) self.panel.SetSizer(vbox) def on_click(self, event): event_id = event.GetId() if event_id == 1: self.image.SetBitmap(self.bmps[1]) else: self.image.SetBitmap(self.bmps[2]) self.panel.Layout() app = wx.App() frm = wx.Frame frm.Show() app.MainLoop()

这段代码存在一些错误,无法正常运行。以下是错误的修正: 1. 缺少括号:`frm = wx.Frame`应该改为`frm = MyFrame()` 2. EVT_BUTTON绑定错误:应该是`self.Bind(wx.EVT_BUTTON, self.on_click, id=1)`和`self.Bind(wx.EVT_BUTTON, self.on_click, id=2)`,分别绑定id为1和2的按钮。 3. 图片路径错误:需要将图片放在与代码同级的images文件夹下。 修正后的代码如下: ```python # coding=utf-8 # 文件位置: code\cho13\ch13_8_4.py import wx class MyFrame(wx.Frame): def __init__(self): super().__init__(None, title='静态图片控制', size=(300, 300)) self.panel = wx.Panel(parent=self) self.bmps = [wx.Bitmap('images/3.jpg', wx.BITMAP_TYPE_JPG), wx.Bitmap('images/4.jpg', wx.BITMAP_TYPE_JPG), wx.Bitmap('images/1.webp', wx.BITMAP_TYPE_WEBP)] b1 = wx.Button(self.panel, id=1, label='Button1') b2 = wx.Button(self.panel, id=2, label='Button2') self.Bind(wx.EVT_BUTTON, self.on_click, id=1) self.Bind(wx.EVT_BUTTON, self.on_click, id=2) self.image = wx.StaticBitmap(self.panel, bitmap=self.bmps[0]) vbox = wx.BoxSizer(wx.VERTICAL) vbox.Add(b1, proportion=1, flag=wx.EXPAND) vbox.Add(b2, proportion=1, flag=wx.EXPAND) vbox.Add(self.image, proportion=3, flag=wx.EXPAND) self.panel.SetSizer(vbox) def on_click(self, event): event_id = event.GetId() if event_id == 1: self.image.SetBitmap(self.bmps[1]) else: self.image.SetBitmap(self.bmps[2]) self.panel.Layout() app = wx.App() frm = MyFrame() frm.Show() app.MainLoop() ```

“ class MyDialog13(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"菜品下架", pos=wx.DefaultPosition, size=wx.Size(200, 200), style=wx.DEFAULT_DIALOG_STYLE) self.Center() self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') wx.StaticText(self.panel, -1, "菜品名称:", (20, 20)) self.t1 = wx.TextCtrl(self.panel, pos=(20, 50), size=(120, 25)) def OnClick(self, e): dialog13 = MyDialog13(None) btn = wx.Button(parent=dialog13.panel, label="下架", pos=(20, 90), size=(90, 40)) btn.Bind(wx.EVT_BUTTON, dialog13.delete) dialog13.ShowModal() def delete(self, e): conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='wm', charset='utf8') cursor = conn.cursor() shop_name = self.t1.GetValue().encode('utf8') # 注意GetValue()获取的是unicode编码 try: sql = "delete from foodshop where shop_name=%s" cursor.execute(sql, shop_name) conn.commit() dial = wx.MessageDialog(None, '成功下架!', '结果', wx.YES_NO) # 创建一个带按钮的对话框, 语法是(self, 内容, 标题, ID) dial.ShowModal() # 显示对话框 except: conn.rollback() finally: cursor.close() conn.close()”逐行解释代码

这段代码是一个使用 wxPython 库实现的 GUI 程序,用于下架一个餐厅菜品。以下是对代码逐行的解释: ```python class MyDialog13(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"菜品下架", pos=wx.DefaultPosition, size=wx.Size(200, 200), style=wx.DEFAULT_DIALOG_STYLE) self.Center() # 将对话框置于屏幕中央 self.panel = wx.Panel(self) # 创建一个面板 self.panel.SetBackgroundColour('white') # 设置面板背景颜色为白色 wx.StaticText(self.panel, -1, "菜品名称:", (20, 20)) # 创建一个静态文本控件,用于提示输入 self.t1 = wx.TextCtrl(self.panel, pos=(20, 50), size=(120, 25)) # 创建一个文本框控件,用于输入菜品名称 def OnClick(self, e): dialog13 = MyDialog13(None) # 创建一个新的对话框 btn = wx.Button(parent=dialog13.panel, label="下架", pos=(20, 90), size=(90, 40)) # 创建一个按钮控件,用于触发下架操作 btn.Bind(wx.EVT_BUTTON, dialog13.delete) # 绑定按钮事件和下架函数 dialog13.ShowModal() # 显示对话框 def delete(self, e): # 连接数据库 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='wm', charset='utf8') cursor = conn.cursor() shop_name = self.t1.GetValue().encode('utf8') # 获取菜品名称 try: # 执行删除操作 sql = "delete from foodshop where shop_name=%s" cursor.execute(sql, shop_name) conn.commit() # 显示成功对话框 dial = wx.MessageDialog(None, '成功下架!', '结果', wx.YES_NO) dial.ShowModal() except: conn.rollback() # 出现异常时回滚 finally: cursor.close() # 关闭游标 conn.close() # 关闭数据库连接 ``` 该程序中定义了一个 `MyDialog13` 类,继承自 `wx.Dialog` 类,用于创建一个对话框。在该类的构造函数中,先调用父类构造函数初始化对话框,然后创建一个面板,并在该面板上添加一个静态文本控件和一个文本框控件,用于输入要下架的菜品名称。在 `OnClick` 函数中,创建一个新的对话框,并在该对话框中添加一个按钮控件,用于触发下架操作,同时绑定按钮事件和下架函数。在 `delete` 函数中,连接数据库并获取要下架的菜品名称,然后执行删除操作,如果成功则显示一个成功对话框,否则回滚操作。最后关闭游标和数据库连接。

相关推荐

“ class MyDialog21(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"派送员信息", pos=wx.DefaultPosition, size=wx.Size(400, 415), style=wx.DEFAULT_DIALOG_STYLE) self.Center() self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') wx.StaticText(self.panel, -1, "菜品名称:", (20, 20)) self.t1 = wx.TextCtrl(self.panel, pos=(90, 20), size=(120, 25)) # btn = wx.Button(parent=self.panel, label="查询", pos=(240, 20), size=(70, 25)) # btn.Bind(wx.EVT_BUTTON, self.find) wx.StaticText(self.panel, -1, "派送员编号", (20, 60)) wx.StaticText(self.panel, -1, "派送员姓名", (120, 60)) wx.StaticText(self.panel, -1, "派送员电话", (220, 60)) def OnClick(self, event): dialog21 = MyDialog21(None) btn = wx.Button(parent=dialog21.panel, label="查询", pos=(240, 20), size=(70, 25)) btn.Bind(wx.EVT_BUTTON, dialog21.find) dialog21.ShowModal() def find(self, event): conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='wm', charset='utf8') cursor = conn.cursor() try: sql = "select * from courier" cursor.execute(sql) rs = cursor.fetchall() h = 80 for row in rs: if row[3] == self.t1.GetValue(): h = h + 20 courier_id = row[0] courier_name = row[1] courier_phone = row[2] wx.StaticText(self.panel, -1, courier_id, (20, h)) wx.StaticText(self.panel, -1, courier_name, (120, h)) wx.StaticText(self.panel, -1, courier_phone, (220, h)) except: conn.rollback() finally: cursor.close() conn.close()”逐行解释代码

"class MyDialog41(wx.Dialog): def init(self, parent): wx.Dialog.init(self, parent, id=wx.ID_ANY, title=u"订单信息", pos=wx.DefaultPosition, size=wx.Size(600, 400), style=wx.DEFAULT_DIALOG_STYLE) self.Center() self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') wx.StaticText(self.panel, -1, "买家电话:", (20, 20)) self.t1 = wx.TextCtrl(self.panel, pos=(90, 20), size=(120, 25)) wx.StaticText(self.panel, -1, "客服人员编号", (20, 60)) wx.StaticText(self.panel, -1, "订单编号", (100, 60)) wx.StaticText(self.panel, -1, "订单金额", (180, 60)) wx.StaticText(self.panel, -1, "订餐方式", (260, 60)) wx.StaticText(self.panel, -1, "食物名称", (340, 60)) wx.StaticText(self.panel, -1, "地址", (420, 60)) wx.StaticText(self.panel, -1, "份数", (500, 60)) def OnClick(self, e): dialog41 = MyDialog41(None) btn = wx.Button(parent=dialog41.panel, label="查询", pos=(240, 20), size=(70, 25)) btn.Bind(wx.EVT_BUTTON, dialog41.find) dialog41.ShowModal() def find(self, event): conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='wm', charset='utf8') cursor = conn.cursor() try: sql = "select * from book" cursor.execute(sql) rs = cursor.fetchall() h = 80 for row in rs: if row[0] == self.t1.GetValue(): h = h + 20 server_id = row[1] order_id = row[2] order_money = row[3] order_way = row[4] name_way = row[5] local_way = row[6] count_way = row[7] wx.StaticText(self.panel, -1, server_id, (20, h)) wx.StaticText(self.panel, -1, order_id, (100, h)) wx.StaticText(self.panel, -1, order_money, (180, h)) wx.StaticText(self.panel, -1, order_way, (260, h)) wx.StaticText(self.panel, -1, name_way, (340, h)) wx.StaticText(self.panel, -1, local_way, (420, h)) wx.StaticText(self.panel, -1, count_way, (500, h)) except: conn.rollback() finally: cursor.close() conn.close()"逐行解释代码

最新推荐

recommend-type

VB学生档案管理系统设计与实现.rar

计算机专业毕业设计VB精品论文资源
recommend-type

debugpy-1.6.3-cp37-cp37m-win_amd64.whl

Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

基于ssm的学生宿舍报修管理系统

开发语言:Java JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.6/5.7(或8.0) 数据库工具:Navicat 开发软件:idea 依赖管理包:Maven 代码+数据库保证完整可用,可提供远程调试并指导运行服务(额外付费)~ 如果对系统的中的某些部分感到不合适可提供修改服务,比如题目、界面、功能等等... 声明: 1.项目已经调试过,完美运行 2.需要远程帮忙部署项目,需要额外付费 3.本项目有演示视频,如果需要观看,请联系我v:19306446185 4.调试过程中可帮忙安装IDEA,eclipse,MySQL,JDK,Tomcat等软件 重点: 需要其他Java源码联系我,更多源码任你选,你想要的源码我都有! https://img-blog.csdnimg.cn/direct/e73dc0ac8d27434b86d886db5a438c71.jpeg
recommend-type

cryptography-42.0.1-cp37-abi3-musllinux_1_1_x86_64.whl

Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

sja1300.x86_64.tar.gz

SQLyong 各个版本,免费下载 SQLyog是业界著名的Webyog公司出品的一款简洁高效、功能强大的图形化MySQL数据库管理工具。使用SQLyog可以快速直观地让您从世界的任何角落通过网络来维护远端的MySQL数据库。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

用Spring boot和vue写一个登录注册界面

好的,这是一个比较常见的技术问题,我可以为您提供一些参考资料和思路。首先,您可以使用Spring Boot作为后端框架来处理用户认证和注册的逻辑,比如使用Spring Security实现用户登录认证。同时,您还需要设计相应的数据模型和数据库表结构来存储用户信息。在前端方面,您可以使用Vue.js作为框架来构建登录注册页面,使用Axios来发起API请求并和后端进行交互。当然,在实现过程中,还需要考虑一些具体细节,比如数据校验、安全性和用户体验等方面。希望这些信息能够帮助到您。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。