
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.0self.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())def bind_shortcuts(self):accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL, ord('L'),self.connect_item.GetId()), (wx.ACCEL_CTRL | wx.ACCEL_SHIFT, ord('L'), self.disconnect_item.GetId()), (wx.ACCEL_CTRL, ord('+'), self.zoom_in_item.GetId()), (wx.ACCEL_CTRL, ord('-'), self.zoom_out_item.GetId()), (wx.ACCEL_CTRL, ord('0'), self.reset_view_item.GetId()), (wx.ACCEL_CTRL | wx.ACCEL_SHIFT, ord('R'),self.record_item.GetId()), ])self.SetAcceleratorTable(accel_tbl)def on_connect(self, event):print("1122")if not self.is_connected:self.is_connected = Trueprint("已连接")def on_disconnect(self, event):if self.is_connected:self.is_connected = Falseprint("已断开")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)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()