
import wx
class 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 = False
self.is_recording = False
self.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())
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 = True
print("已连接")
def on_disconnect(self, event):
if self.is_connected:
self.is_connected = False
print("已断开")
def on_zoom_in(self, event):
self.scale_factor *= 1.1
print(f"放大: {self.scale_factor:.2f}x")
def on_zoom_out(self, event):
self.scale_factor *= 0.9
print(f"缩小: {self.scale_factor:.2f}x")
def on_reset_view(self, event):
self.scale_factor = 1.0
print("视图已重置")
def on_record(self, event):
self.is_recording = not self.is_recording
status = "开始录制" 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()