def DeleteSelected(self): indices = self._GetSelected() indices.sort(reverse=True) for index in indices: (data, display_tuple, sort_tuple) = self._indices_to_data_info[index] self.DeleteItem(index) del self._data_to_indices[data] del self._indices_to_data_info[index] self._RecalculateIndicesAfterDelete() wx.QueueEvent(self.GetEventHandler(), ListCtrlEvent(-1))
def change_image(self, primary_image_file): if os.path.exists(primary_image_file): client_size = self.GetClientSize() # 获取主图片,并将其缩放适应Panel大小 self._primary_image = wx.Image(primary_image_file, wx.BITMAP_TYPE_ANY) primary_bitmap = self._primary_image.Copy() x1 = client_size[0] * primary_bitmap.GetHeight() x2 = client_size[1] * primary_bitmap.GetWidth() if x1 < x2: new_height = int(x1 / float(primary_bitmap.GetWidth())) primary_bitmap.Rescale(client_size[0], new_height) else: new_width = int(x2 / float(primary_bitmap.GetHeight())) primary_bitmap.Rescale(new_width, client_size[1]) # 生成主图片的位图 self._primary_bitmap = wx.Bitmap(primary_bitmap) # 记录新的主图片位图的大小 self._primary_bitmap_size = wx.Size(primary_bitmap.GetWidth(), primary_bitmap.GetHeight()) # 发送绘制背景消息 wx.QueueEvent(self, wx.PyCommandEvent(wx.wxEVT_ERASE_BACKGROUND))
def EventButton( self, event ): with ClientGUITopLevelWindows.DialogEdit( self, 'edit time delta' ) as dlg: panel = ClientGUIScrolledPanels.EditSingleCtrlPanel( dlg ) control = TimeDeltaCtrl( panel, min = self._min, days = self._show_days, hours = self._show_hours, minutes = self._show_minutes, seconds = self._show_seconds, monthly_allowed = self._monthly_allowed ) control.SetValue( self._value ) panel.SetControl( control ) dlg.SetPanel( panel ) if dlg.ShowModal() == wx.ID_OK: value = panel.GetValue() self.SetValue( value ) new_event = TimeDeltaEvent( 0 ) wx.QueueEvent( self.GetEventHandler(), new_event )
def SetData(self, datas): existing_datas = set(self._data_to_indices.keys()) # useful to preserve order here sometimes (e.g. export file path generation order) datas_to_add = [data for data in datas if data not in existing_datas] datas_to_update = [data for data in datas if data in existing_datas] datas_to_delete = existing_datas.difference(datas) if len(datas_to_delete) > 0: self.DeleteDatas(datas_to_delete) if len(datas_to_update) > 0: self.UpdateDatas(datas_to_update) if len(datas_to_add) > 0: self.AddDatas(datas_to_add) self._SortAndRefreshRows() wx.QueueEvent(self.GetEventHandler(), ListCtrlEvent(-1))
def _select_callback(self, selection): selection = (max(0.0, min(selection)), min(max(selection), 1.0)) evt = PyoGuiSndViewSelectionEvent(value=selection, id=self.GetId(), object=self) wx.QueueEvent(self, evt)
def _position_callback(self, pos): evt = PyoGuiSndViewMousePositionEvent(value=pos, id=self.GetId(), object=self) wx.QueueEvent(self, evt)
def _position_callback(self, pos): evt = PyoGuiSndViewMousePositionEvent(value=pos) wx.QueueEvent(self, evt)
def HitCancelButton(window): wx.QueueEvent( window, wx.CommandEvent(commandEventType=wx.EVT_BUTTON.typeId, id=wx.ID_CANCEL))
def res_init_ui(self, parameter): self.ui.main.Connect(-1, -1, self.__RES_INIT_UI_ID, self.res_init_ui_proc) wx.QueueEvent( self.ui.main, XmlResourceHandlerFrameEvent(self.__RES_INIT_UI_ID, None))
def start(self, parameter): setattr(self.ui, 'main', self.uipool.get(self.dirname, 'main')) self.ui.main.Connect(-1, -1, self.__START_EVT_ID, self.showportalframe) wx.QueueEvent(self.ui.main, ShowPortalFrameEvent(self.__START_EVT_ID, None))
def EventCharHook(self, event): HG.client_controller.ResetIdleTimer() (modifier, key) = ClientData.ConvertKeyEventToSimpleTuple(event) if key in (wx.WXK_INSERT, wx.WXK_NUMPAD_INSERT): self._intercept_key_events = not self._intercept_key_events self._UpdateBackgroundColour() elif key == wx.WXK_SPACE and event.RawControlDown( ): # this is control, not command on os x, for which command+space does some os stuff self._ScheduleListRefresh(0.0) elif self._intercept_key_events: if key in (ord('A'), ord('a')) and modifier == wx.ACCEL_CTRL: event.Skip() elif key in (wx.WXK_RETURN, wx.WXK_NUMPAD_ENTER ) and self._ShouldTakeResponsibilityForEnter(): self._TakeResponsibilityForEnter() elif key in (wx.WXK_UP, wx.WXK_NUMPAD_UP, wx.WXK_DOWN, wx.WXK_NUMPAD_DOWN ) and self._text_ctrl.GetValue() == '' and len( self._dropdown_list) == 0: if key in (wx.WXK_UP, wx.WXK_NUMPAD_UP): new_event = SelectUpEvent(-1) elif key in (wx.WXK_DOWN, wx.WXK_NUMPAD_DOWN): new_event = SelectDownEvent(-1) wx.QueueEvent(self.GetEventHandler(), new_event) elif key in (wx.WXK_PAGEDOWN, wx.WXK_NUMPAD_PAGEDOWN, wx.WXK_PAGEUP, wx.WXK_NUMPAD_PAGEUP ) and self._text_ctrl.GetValue() == '' and len( self._dropdown_list) == 0: if key in (wx.WXK_PAGEUP, wx.WXK_NUMPAD_PAGEUP): new_event = ShowPreviousEvent(-1) elif key in (wx.WXK_PAGEDOWN, wx.WXK_NUMPAD_PAGEDOWN): new_event = ShowNextEvent(-1) wx.QueueEvent(self.GetEventHandler(), new_event) else: # Don't say QueueEvent here--it duplicates the event processing at higher levels, leading to 2 x F9, for instance self._dropdown_list.EventCharHook( event ) # this typically skips the event, letting the text ctrl take it else: event.Skip()
def initui(self, parameter): setattr(self.ui, "main", parameter) self.ui.main.Connect(-1, -1, self.__INIT_NOISE_EVT_ID, self.initData) wx.QueueEvent(self.ui.main, RenderHandlerFrameEvent(self.__INIT_NOISE_EVT_ID, None))
def _OKParent(self): wx.QueueEvent(self.GetEventHandler(), ClientGUITopLevelWindows.OKEvent(-1))
def add_resource_show(self, parameter): self.ui.main.Connect(-1, -1, self.__RES_DLG_SHOW_ID, self.add_resource_show_proc) wx.QueueEvent( self.ui.main, XmlResourceHandlerFrameEvent(self.__RES_DLG_SHOW_ID, parameter))
def update_initresource(self, parameter): self.ui.main.Connect(-1, -1, self.__UPDATE_INIT_RES, self.update_initresource_proc) wx.QueueEvent( self.ui.main, XmlResourceHandlerFrameEvent(self.__UPDATE_INIT_RES, None))
def rem_resource(self, event): self.ui.main.Connect(-1, -1, self.__RES_REMOVE_ID, self.rem_resource_proc) wx.QueueEvent(self.ui.main, XmlResourceHandlerFrameEvent(self.__RES_REMOVE_ID, None))
def OnSystemInfoEvent(self, info): """ 接收监控System的信息,并刷新界面 :param info: :return: """ self.__logger.debug("sw version = %s" % info["version"]['sw']) self.__logger.debug("hw version = %s" % info["version"]['hw']) self.__logger.debug("temperature = %s" % info["temperature"]) self.__logger.debug("ip = %s" % info["ip"]) self.__logger.debug("uuid = %s" % info["uuid"]) self.__logger.debug("memory = %s" % info["memory"]) self.__logger.debug("cpu = %s" % info["cpu"]) self.__logger.debug("network = %s" % info["network"]) self.__logger.debug("uptime = %s" % info["uptime"]) """ print("system info : sw version = ", info["version"]['sw']) print("system info : hw version = ", info["version"]['hw']) print("system info : temperature = ", info["temperature"]) print("system info : ip = ", info["ip"]) print("system info : uuid = ", info["uuid"]) print("system info : memory = ", info["memory"]) print("system info : cpu = ", info["cpu"]) print("system info : network = ", info["network"]) print("system info : uptime = ", info["uptime"]) # print("system info : storage = ", info["storage"]) """ uuid = info["uuid"][-4:] self.__logger.debug("uuid = %s" % uuid) self.__logger.debug("focus uuid = %s" % self.focus_node[-4:]) self.system_info[uuid] = info # 每个设备根据UUID保存一份系统信息 if uuid != self.focus_node[-4:]: # 不是当前焦点的uuid,则不显示系统信息 # print("not focus node chart!") return # 计算CPU核数 cpu_core = len(info["cpu"].keys()) self.__logger.debug("cpu core = %d" % cpu_core) # 计算内存占有率 total = int(int(info["memory"]["total"][:-1])) used = int(int(info["memory"]["used"][:-1])) memory_usage = (used * 100) // total self.__logger.debug("memory usage = %d" % memory_usage) network_tx = float( self.non_decimal.sub('', self.system_info[uuid]["network"]["tx"])) if self.system_info[uuid]["network"]["tx"][-1] == 'M': network_tx * 1024 network_rx = float( self.non_decimal.sub('', self.system_info[uuid]["network"]["rx"])) if self.system_info[uuid]["network"]["rx"][-1] == 'M': network_rx * 1024 if (network_tx + network_rx) > 1024: network_total = "%.2fM" % ((network_tx + network_rx) / 1024) else: network_total = "%.2fK" % (network_tx + network_rx) # 刷新某个设备节点的性能信息 evt = PerformanceInfoEvent(uptime=info["uptime"], temperature=info["temperature"], memory=memory_usage, network=network_total, cpu=cpu_core) wx.QueueEvent(self.system_info_panel.performance_info, evt) # 刷新某个设备节点的设备信息 evt = NodeInfoEvent(hw=info["version"]['hw'], sw=info["version"]['sw'], ip=info["ip"], uuid=info["uuid"]) wx.QueueEvent(self.system_info_panel.node_info, evt) # 刷新设备CPU图表 if info["cpu"]: # print("labels = ", info["cpu"].keys()) # print("values = ", info["cpu"].values()) evt = CpuInfoEvent(data=info["cpu"].values(), labels=info["cpu"].keys()) wx.QueueEvent(self.diagram_info_panel.cpu_info_panel, evt) # 刷新设备Memory图表 if info["memory"]: sizes = [] memory_sizes = [] memory_labels = ['used', 'unused'] for size in info['memory'].values(): sizes.append(int(size[:-1])) total = int(sizes[0]) used = int(sizes[1]) memory_usage = (used * 100) // total memory_sizes.append(memory_usage) memory_sizes.append(100 - memory_usage) evt = MemoryInfoEvent(sizes=memory_sizes, labels=memory_labels) wx.QueueEvent(self.diagram_info_panel.memory_info_panel, evt) # 刷新设备网络信息图表 if info["network"]: evt = NetworkInfoEvent(tx=info["network"]["tx"], rx=info["network"]["rx"]) wx.QueueEvent(self.diagram_info_panel.network_panel, evt)
def _on_btn_import_users(self, event): file_dialog = wx.FileDialog( self, "选择要导入的用户数据文件", wildcard="Excel 文件(*.xlsx)|*.xlsx|Excel97-2003 文件(*.xls)|*.xls", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) if file_dialog.ShowModal() == wx.ID_OK: # 导入操作进行时设置鼠标形状为箭头等待状态 self.SetCursor(wx.Cursor(wx.CURSOR_ARROWWAIT)) # 记录是否覆盖数据状态 b_cover_data = self._chk_cover_users_data.GetValue() # 获取待导入的文件 file = file_dialog.GetPath() # 打开Excel文件 conn_str = ( r'DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=%s;' % file) conn_excel = pyodbc.connect(conn_str, autocommit=True) cursor_excel = conn_excel.cursor() cursor_excel_tmp = conn_excel.cursor() # 连接数据库 conn = pyodbc.connect( 'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=%s\\LMSdb.accdb' % os.getcwd()) cursor = conn.cursor() # 逐个表读取数据 for worksheet in cursor_excel.tables(): # 获取表名 table_name = worksheet[2] # 读取表内容 sel_str = (r'SELECT * FROM [%s]' % table_name) excel_rows = cursor_excel_tmp.execute(sel_str).fetchall() # 逐行读取 for index, excel_row in enumerate(excel_rows): # 行数据不完善(用户Id、用户名字或用户班级为空)时,跳过该行 if (excel_row[0] is None) or (excel_row[1] is None) or ( excel_row[3] is None): continue # 在数据库中查找是否存在该Id的用户 cursor.execute( "SELECT user_id FROM users WHERE user_id = ?", excel_row[0]) user = cursor.fetchone() if user is None: # 无此用户,则将该用户添加到数据库中 cursor.execute( """ INSERT INTO users(user_id, user_name, user_photo, user_class) VALUES(?, ?, ?, ?)""", excel_row[0], excel_row[1], excel_row[2], excel_row[3]) elif b_cover_data: # 有此用户,且需要覆盖原数据时,则更新该用户信息。(不能覆盖原数据时不进行操作) cursor.execute( """ UPDATE users SET user_name=?, user_photo=?, user_class=? WHERE user_id=?""", excel_row[1], excel_row[2], excel_row[3], excel_row[0]) conn.commit() # 关闭Excel文件 cursor_excel_tmp.close() cursor_excel.close() conn_excel.close() # 关闭数据库 cursor.close() conn.close() # 恢复鼠标形状 self.SetCursor(wx.Cursor(wx.CURSOR_ARROW)) # 弹出提示框 wx.MessageBox("导入完成!") # 更新显示当前班级用户 wx.QueueEvent(self, wx.PyCommandEvent(wx.EVT_CHOICE)) event.Skip()
def OnNodeShow(self, evt): """ :param evt: :return: """ self.__logger.info("Switch Node = {} --> {}".format( self.focus_node, evt.name)) if self.focus_node != evt.name: self.focus_node = evt.name uuid = self.focus_node[-4:] # 计算cpu核数 cpu_core = len(self.system_info[uuid]["cpu"].keys()) self.__logger.debug("cpu core = {}".format(cpu_core)) # 计算内存占有率 total = int(self.system_info[uuid]['memory']['total'][:-1]) used = int(self.system_info[uuid]['memory']['used'][:-1]) memory_usage = (used * 100) // total self.__logger.debug("memory usage = {}".format(memory_usage)) # 计算网络速率 network_tx = float( self.non_decimal.sub('', self.system_info[uuid]["network"]["tx"])) if self.system_info[uuid]["network"]["tx"][-1] == 'M': network_tx * 1024 network_rx = float( self.non_decimal.sub('', self.system_info[uuid]["network"]["rx"])) if self.system_info[uuid]["network"]["rx"][-1] == 'M': network_rx * 1024 if (network_tx + network_rx) > 1024: network_total = "%.2fM" % ((network_tx + network_rx) / 1024) else: network_total = "%.2fK" % (network_tx + network_rx) #network_tx = float(self.system_info[uuid]["network"]["tx"]) #network_rx = float(self.system_info[uuid]["network"]["rx"]) # 刷新设备性能信息 evt = PerformanceInfoEvent( uptime=self.system_info[uuid]["uptime"], temperature=self.system_info[uuid]["temperature"], memory=memory_usage, network=network_total, cpu=cpu_core) wx.QueueEvent(self.system_info_panel.performance_info, evt) # 刷新设备节点信息 evt = NodeInfoEvent(hw=self.system_info[uuid]["version"]['hw'], sw=self.system_info[uuid]["version"]['sw'], ip=self.system_info[uuid]["ip"], uuid=self.system_info[uuid]["uuid"]) wx.QueueEvent(self.system_info_panel.node_info, evt) # 刷新设备CPU图表 if self.system_info[uuid]["cpu"]: # print("labels = ", self.system_info[uuid]["cpu"].keys()) # print("values = ", self.system_info[uuid]["cpu"].values()) evt = CpuInfoEvent(data=self.system_info[uuid]["cpu"].values(), labels=self.system_info[uuid]["cpu"].keys()) wx.QueueEvent(self.diagram_info_panel.cpu_info_panel, evt) # 刷新设备Memory图表 if self.system_info[uuid]["memory"]: sizes = [] memory_sizes = [] memory_labels = ['used', 'unused'] for size in self.system_info[uuid]['memory'].values(): sizes.append(int(size[:-1])) total = int(sizes[0]) used = int(sizes[1]) # print("total = ", total) # print("used = ", used) memory_usage = (used * 100) // total memory_sizes.append(memory_usage) memory_sizes.append(100 - memory_usage) evt = MemoryInfoEvent(sizes=memory_sizes, labels=memory_labels) wx.QueueEvent(self.diagram_info_panel.memory_info_panel, evt) # 刷新设备网络信息图表 if self.system_info[uuid]["network"]: evt = NetworkInfoEvent( tx=self.system_info[uuid]["network"]["tx"], rx=self.system_info[uuid]["network"]["rx"]) wx.QueueEvent(self.diagram_info_panel.network_panel, evt) pass
def SetFocus(self, focus): """ 设置当前TAB面板是否聚焦 :param focus: =True, 设置当前面板聚焦 :return: """ # print("name = ", self.name) # print("focus = ", focus) # print("self.focus = ", self.focus) # print("self.tab = ", self.tab) if self.focus != focus: if focus: self.module_name.SetBackgroundColour((0xfe, 0xd3, 0x63)) self.module_name.SetForegroundColour((0, 0, 0)) if self.tab == 'Modules': #self.modules.SetBackgroundColour((0x27, 0xc1, 0xf8)) self.modules.SetBackgroundColour('DodgerBlue') self.modules.SetForegroundColour((250, 255, 255)) self.charts.SetBackgroundColour("GREY") self.charts.SetForegroundColour((250, 255, 255)) else: self.modules.SetBackgroundColour("GREY") self.modules.SetForegroundColour((250, 255, 255)) # self.charts.SetBackgroundColour((0x27, 0xc1, 0xf8)) self.charts.SetBackgroundColour('DodgerBlue') self.charts.SetForegroundColour((250, 255, 255)) if self.tab == 'Modules': # self.modules.SetBackgroundColour((0x27, 0xc1, 0xf8)) self.modules.SetBackgroundColour('DodgerBlue') self.modules.SetForegroundColour((250, 255, 255)) self.charts.SetBackgroundColour("GREY") self.charts.SetForegroundColour((250, 255, 255)) # 发送切换Module图表 evt = ModuleEvent( name=self.tab, ) wx.QueueEvent(wx.GetApp().GetTopWindow(), evt) else: self.modules.SetBackgroundColour("GREY") self.modules.SetForegroundColour((250, 255, 255)) # self.charts.SetBackgroundColour((0x27, 0xc1, 0xf8)) self.charts.SetBackgroundColour('DodgerBlue') self.charts.SetForegroundColour((250, 255, 255)) # 发送切换Chart图表 evt = ChartEvent( name=self.tab, ) wx.QueueEvent(wx.GetApp().GetTopWindow(), evt) else: self.module_name.SetBackgroundColour("GREY") self.module_name.SetForegroundColour((250, 255, 255)) self.modules.SetBackgroundColour("GREY") self.modules.SetForegroundColour((250, 255, 255)) self.charts.SetBackgroundColour("GREY") self.charts.SetForegroundColour((250, 255, 255)) self.focus = focus pass
def addtomain(self, parameter): print('init extension menu') self.ui.main.Connect(-1, -1, self.__ADD_TO_MAIN_EVT_ID, self.addtomain_proc) wx.QueueEvent(self.ui.main, ShowPortalFrameEvent(self.__ADD_TO_MAIN_EVT_ID, parameter))
def got_resmgr_lexicon(self, parameter): print("calls got_resmgr_lexicon") self.__resmgr = parameter.result wx.QueueEvent(self.ui.main, LexiconHandlerFrameEvent(self.__INIT_LEXICON_UI, None))
def PostSizeChangedEvent(window): event = CC.SizeChangedEvent(-1) wx.QueueEvent(window.GetEventHandler(), event)
def bind_events(self, parameter): self.ui.main.Connect(-1, -1, self.__BIND_EVT_ID, self.bind_event_ui_proxy) wx.QueueEvent(self.ui.main, ShowPortalFrameEvent(self.__BIND_EVT_ID, parameter))
def _outFunction(self, value): evt = PyoGuiKeyboardEvent(value=value, id=self.GetId(), object=self) wx.QueueEvent(self, evt)
def initui(self, parameter): setattr(self.ui, "main", parameter) self.ui.main.Connect(-1, -1, self.__INIT_ALGOS_EVT_ID, self.initHashes) wx.QueueEvent(self.ui.main, HashHandlerFrameEvent(self.__INIT_ALGOS_EVT_ID, parameter))
def HitButton(button): wx.QueueEvent( button, wx.CommandEvent(commandEventType=wx.EVT_BUTTON.typeId, id=button.GetId()))
def _outFunction(self, value): evt = PyoGuiMultiSliderEvent(value=value, id=self.GetId(), object=self) wx.QueueEvent(self, evt)
def HitOKButton(window): wx.QueueEvent( window, wx.CommandEvent(commandEventType=wx.EVT_BUTTON.typeId, id=wx.ID_OK))
def _outFunction(self, value): evt = PyoGuiMultiSliderEvent(value=value) wx.QueueEvent(self, evt)