当前位置: 首页 > news >正文

wxpython快捷键示例

**在这里插入图片描述**

import wxclass MyFrame(wx.Frame):def __init__(self, parent, title):super().__init__(parent, title=title, size=(800, 600))# 创建菜单和工具栏self.create_menu()self.create_toolbar()# 状态变量self.is_connected = Falseself.is_recording = Falseself.scale_factor = 1.0# 绑定快捷键self.bind_shortcuts()self.Show()def create_menu(self):menu_bar = wx.MenuBar()file_menu = wx.Menu()self.connect_item = file_menu.Append(wx.ID_ANY, "连接\tCtrl+L")self.disconnect_item = file_menu.Append(wx.ID_ANY, "断开\tCtrl+Shift+L")file_menu.AppendSeparator()exit_item = file_menu.Append(wx.ID_EXIT, "退出\tCtrl+Q")view_menu = wx.Menu()self.zoom_in_item = view_menu.Append(wx.ID_ANY, "放大\tCtrl++")self.zoom_out_item = view_menu.Append(wx.ID_ANY, "缩小\tCtrl+-")self.reset_view_item = view_menu.Append(wx.ID_ANY, "重置视图\tCtrl+0")record_menu = wx.Menu()self.record_item = record_menu.AppendCheckItem(wx.ID_ANY, "录制\tCtrl+Shift+R")menu_bar.Append(file_menu, "文件")menu_bar.Append(view_menu, "视图")menu_bar.Append(record_menu, "录制")self.SetMenuBar(menu_bar)# 绑定菜单项事件self.Bind(wx.EVT_MENU, self.on_connect, self.connect_item)self.Bind(wx.EVT_MENU, self.on_disconnect, self.disconnect_item)self.Bind(wx.EVT_MENU, self.on_exit, exit_item)self.Bind(wx.EVT_MENU, self.on_zoom_in, self.zoom_in_item)self.Bind(wx.EVT_MENU, self.on_zoom_out, self.zoom_out_item)self.Bind(wx.EVT_MENU, self.on_reset_view, self.reset_view_item)self.Bind(wx.EVT_MENU, self.on_record, self.record_item)def create_toolbar(self):self.toolbar = self.CreateToolBar()def bmp(path):return wx.Bitmap(wx.Image(path, wx.BITMAP_TYPE_PNG).Rescale(20, 20))self.toolbar.AddTool(wx.ID_ANY, "连接", bmp("connect.png"), "连接")self.toolbar.AddTool(wx.ID_ANY, "断开", bmp("disconnect.png"), "断开")self.toolbar.AddSeparator()self.toolbar.AddTool(wx.ID_ANY, "放大", bmp("zoom_in.png"), "放大")self.toolbar.AddTool(wx.ID_ANY, "缩小", bmp("zoom_out.png"), "缩小")self.toolbar.AddTool(wx.ID_ANY, "重置视图", bmp("reset.png"), "重置视图")self.toolbar.AddSeparator()self.record_tool = self.toolbar.AddCheckTool(wx.ID_ANY, "录制", bmp("record.png"), wx.NullBitmap, "录制", "开始或停止录制")self.toolbar.Realize()# 绑定工具栏事件self.Bind(wx.EVT_TOOL, self.on_connect, id=self.toolbar.GetToolByPos(0).GetId())self.Bind(wx.EVT_TOOL, self.on_disconnect, id=self.toolbar.GetToolByPos(1).GetId())self.Bind(wx.EVT_TOOL, self.on_zoom_in, id=self.toolbar.GetToolByPos(3).GetId())self.Bind(wx.EVT_TOOL, self.on_zoom_out, id=self.toolbar.GetToolByPos(4).GetId())self.Bind(wx.EVT_TOOL, self.on_reset_view, id=self.toolbar.GetToolByPos(5).GetId())self.Bind(wx.EVT_TOOL, self.on_record, id=self.record_tool.GetId())# 你的快捷键不起作用,是因为加速器表里的第三个参数不能用 wx.ID_ANY,必须用你实际菜单项的 ID,否则事件不会被正确分发。def bind_shortcuts(self):# 创建加速器表accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL, ord('L'),self.connect_item.GetId()),           # Ctrl+L: 连接(wx.ACCEL_CTRL | wx.ACCEL_SHIFT, ord('L'), self.disconnect_item.GetId()),  # Ctrl+Shift+L: 断开(wx.ACCEL_CTRL, ord('+'), self.zoom_in_item.GetId()),           # Ctrl++: 放大(wx.ACCEL_CTRL, ord('-'), self.zoom_out_item.GetId()),           # Ctrl+-: 缩小(wx.ACCEL_CTRL, ord('0'), self.reset_view_item.GetId()),           # Ctrl+0: 重置视图(wx.ACCEL_CTRL | wx.ACCEL_SHIFT, ord('R'),self.record_item.GetId()),  # Ctrl+Shift+R: 录制])self.SetAcceleratorTable(accel_tbl)def on_connect(self, event):print("1122")if not self.is_connected:self.is_connected = Trueprint("已连接")# 更新UI状态# self.GetMenuBar().Enable(self.GetMenuBar().FindItem("断开"), True)# self.GetMenuBar().Enable(self.GetMenuBar().FindItem("连接"), False)def on_disconnect(self, event):if self.is_connected:self.is_connected = Falseprint("已断开")# 更新UI状态# self.GetMenuBar().Enable(self.GetMenuBar().FindItem("连接"), True)# self.GetMenuBar().Enable(self.GetMenuBar().FindItem("断开"), False)def on_zoom_in(self, event):self.scale_factor *= 1.1print(f"放大: {self.scale_factor:.2f}x")def on_zoom_out(self, event):self.scale_factor *= 0.9print(f"缩小: {self.scale_factor:.2f}x")def on_reset_view(self, event):self.scale_factor = 1.0print("视图已重置")def on_record(self, event):self.is_recording = not self.is_recordingstatus = "开始录制" if self.is_recording else "停止录制"print(status)# 更新UI状态self.record_item.Check(self.is_recording)self.GetToolBar().ToggleTool(self.record_tool.GetId(), self.is_recording)def on_exit(self, event):self.Close()if __name__ == "__main__":app = wx.App()frame = MyFrame(None, "快捷键示例")app.MainLoop()
http://www.lqws.cn/news/163963.html

相关文章:

  • SpringBoot3整合MySQL8的注意事项
  • 云服务器自带的防御可靠吗
  • 使用 minicom 录制串口报文并回放
  • 数据融合是什么?进行数据融合的4大关键环节!
  • AI开启光伏新时代:精准计算每小时发电量​
  • 【JS进阶】ES5 实现继承的几种方式
  • 微软认证考试科目众多?该如何选择?
  • 基于SpringBoot的房屋租赁系统的设计与实现(thymeleaf+MySQL)
  • IDEA202403 设置主题和护眼色
  • 【QT】qtdesigner中将控件提升为自定义控件后,css设置样式不生效(已解决,图文详情)
  • C# 委托UI控件更新例子,何时需要使用委托
  • Agentic AI 和 Agent AI 到底区别在哪里?
  • Redis大量key集中过期怎么办
  • Qt 开发中的父类与父对象的区别和父对象传递:如何选择 `QWidget` 或 `QObject`?
  • 基于Canvas实现画布
  • Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
  • 西门子SCL之IF-ELSIF语句详解及应用(安全控制代码)
  • 【计组】真题 2015 大题
  • Vue---vue使用AOS(滚动动画)库
  • 分布式光纤传感(DAS)技术应用解析:从原理到落地场景
  • 【QT】使用QT帮助手册找控件样式
  • 基于责任链模式进行订单参数的校验
  • 自动化办公集成工具:一站式解决文档处理难题
  • React Router 中 navigate 后浏览器返回按钮不起作用的问题记录
  • React Hooks 基础指南
  • 如果科技足够发达,是否还需要维持自然系统(例如生物多样性)中那种‘冗余’和‘多样性’,还是可以只保留最优解?
  • Python数据可视化科技图表绘制系列教程(四)
  • 动静态库的使用(Linux下)
  • 好得睐:以品质守味、以科技筑基,传递便捷与品质
  • Cilium动手实验室: 精通之旅---6.Cilium IPv6 Networking and Observability - Lab