#!/usr/bin/env python import wx import subprocess from log_utils import LogUtils from programmer import Programmer from dfu_image_generator import DfuImageGenerator from settings import Settings from about import About from wx.lib.embeddedimage import PyEmbeddedImage title_icon = PyEmbeddedImage( b'iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAAXNSR0IArs4c6QAAC7VJREFU' b'eF7tnW2MVFcZx58z020x1nZnLVljTElMaMSQLtZYEmNaYHeJxGgaa2eAbUuUztT2Q1HbqAjf' b'pC8aS2PTGJmFGikLzDRVYmMkZXlr/EBVotgGiHyiJURCw6xoaIGde8ySvkXqMvfOnDPnPvfH' b'V+59Xn7/+5uZe3cWjIjkhD8QgMCHEjAIwpUBgf9PAEG4OiAwDQEE4fKAAIJwDUAgGQHeQZJx' b'46yMEECQjATNmskIIEgybpyVEQIIkpGgWTMZAQRJxo2zMkIAQTISNGsmI4AgybhxVkYIIEhG' b'gmbNZAQyK8gNG+7un7x+xrCY3M1GpN8a229Erk6GUddZVuSCseaUFTmVE/unC+ff3vefe597' b'U9eWrW2TOUGuHysvyl1lHhIjX20NEUddImDlxWjSPv2vkdE9WSKSKUF6t5erJmdWZingTu9q' b'I7tpYulopdN1Q62XGUEKtcrvxciXQw0iXXPZvzeKo59L18zJps2EIIV6pZkMD2dNR6BRrOa1' b'E1IvSKFe/quIuVl7kF3Zz8rORqn6la709tRUtSDcc7i/irTfk6gV5NLTqh6zy/0lQofooh3W' b'+nRLrSCFWmUHj3I9yWvlxUapeoenbl7bqBTk2s333NAz4yOnvJLMeLN849wn37x/izrmKgXp' b'q5W/YY2pZfya9bq+jaIVE0s3bvHa1EMzlYL01io/NUYe9sCPFu8QsFaenChVv68NiEpBCrXK' b'r8XI3drCCnofK1sapeqKoGdMMJxKQXrr5Z1GzHA8HnZ/vOO1H21uj7OhFbtrojiq7psKKgUp' b'1Mt7ROIFLGL3N4qji+JcFFqPhd/7ySLIeywQ5F0UCIIgH/LijyAIcvllwTsI7yCXXRW8g/AO' b'wjvINDdQCIIgCIIgLT1j4SMWH7H4iDWNKgiCIAiCIK28m/IUi6dYPMWaxhQEQRAEQZAW3kx5' b'isVTLJ5i8RSrhZcKEW7SuUnnJp2b9FZeLLgH4R6EexDuQVp4reAehHsQ7kG4B2nhpYJ7kA9A' b'4iMWH7H4iMVHrBZeN/mIxUcsPmLxEauFl4oOf8Q6v2XwMzkj/S11dnjQvT2feOrfkh+I0+Jj' b'0jy0+eI/vxvnHK3HppnfW1F08rp79h7rVDZt/xzk4tjgovxV8pAx5osi8vFODUYdCLRB4LS1' b'9kBzUp7uGdnd1n/405Ygze2D1Rz/IU0bOXKqawJRZDfll+5O/B/+JBakWRt8JGfMT1wvSH0I' b'tEsgiuTB/NLxDUnqJBLkwnOL5vVck5v6d6SuTdKUcyDgmcDZc2/Jgo+uGD8Ut28iQSa3Dd6X' b'z5tERsYdkOMh0AkCF5t21dXLdj8Tt1YiQZrbh57J5eSBuM04HgLdIhBZeTZfGi/H7Z9IkKg+' b'tMeIxPqnKeMOxvEQ6CQBK7I/VxyP/S9nIkgnU6BWsAQQJNhoGCwEAggSQgrMECwBBAk2GgYL' b'gQCChJACMwRLAEGCjYbBQiCAICGkwAzBEkCQYKNhsBAIIEgIKTBDsAQQJNhoGCwEAggSQgrM' b'ECwBBAk2GgYLgQCChJACMwRLAEGCjYbBQiCAICGkwAzBEkCQYKNhsBAIIEgIKTBDsAQQJNho' b'GCwEAggSQgrMECwBBAk2GgYLgQCChJACMwRLAEGCjYbBQiCAICGkwAzBEkCQYKNhsBAIIEgI' b'KTBDsAQQJNhoGCwEAggSQgrMECwBBAk2GgYLgQCChJACMwRLAEGCjYbBQiCAICGkwAzBEkCQ' b'YKNhsBAIIEgIKTBDsAQQJNhoGCwEAggSQgrMECwBBAk2GgYLgQCChJACMwRLAEGCjYbBQiCA' b'ICGkwAzBEkAQn9H0f16kcJNI76dFZhR8do7f69xpkcYxkbPHRU4djH++kjMQxFeQc5aLzP2m' b'r26d7fP6XpFXHutszZRUQxAfQd21y0cX9z2eH3bfI7AOCOI6kPk/Erlxoesufuq/9iuRI1v9' b'9AqkC4K4DGLqnuO2J1x28F/75R9m6p4EQVxeYrO/LjLvAZcd/Nd+9VmRo9v89+1SRwRxCf7W' b'H4jMGnLZwX/tN/aJHHjUf98udfQqSLM2uDlnzEiXdvXfdsHPRGYO+O/rsuPpQyL7HnHZIaja' b'kZV6vjS+LO5QRkRycU9qbhtalcvL+rjnpfZ4BEltdO8OHlm7Jl/aHftGMpEgb48tHL6mJ78z' b'9dRaXQBBWiUV7HHnJ+2SGct3vxR3wESCTDVp1gbHcsYsjdswlccjSCpje+/dQ2Rtvjj+eJIl' b'Egsy1czWh5pJmqbuHARJXWQfHNgUx/NJF2hLkEvvJPWh1TmRdUkHSMV5CJKKmP53yMja7fnS' b'7rYeJrUtyNRQb28dXNyTl1tEzIAx0p9KmtMMbYZ+MSCF2b2q9mocm7DjDx5StdPUpxprT0hk' b'Dl6MmodnjOxt+7tBHRFEG+TLXomiaI8x5nZNe1pr9+dyuUWadnKxC4K0QDVCkBYo6TwEQVrI' b'FUFagKT0EARpIVgEaQGS0kMQpIVgEaQFSEoPQZAWgkWQFiApPaQjgvRtXbnY5s2lx7yi8DHv' b'3qE1AwOFWaoe8x5qHJ9YOP6ouse8YuWEjczBXGQPnxkZ7f5j3kK9slqU/6Dwdwseli/NvEnV' b'a+QfT/9DvrbvSVU7XbaMle2NUrV7Pygs1CuZ+KoJgqTbo0ax6v+rJoVaZUyMZOLLigiSbkFE' b'ZG2jWPX3ZcW+sfKw7TGZ+bo7gqReEDGTzSVnlm/y83X33m2VVSZDvzCFIOkXRGy0plHa6OcX' b'pgq18mbJ0K/cIogGQWy9URr18yu3hXp5j4iuL+9Ndwn88tZvSXHWfAVXyfsr/PaNv8jKA6Oq' b'dpp+Gbu/URyN/eXMRD8HyZog3549KI/NK6q6mH786g556ugfVO2EIF2Kc0H/HPnNbd/pUnc3' b'be98+eey99RhN8WDrMo7iNNYRuffJ3fe+AWnPXwVX/faDll/JEvvHlNkEcT59XXmrg3Oe/ho' b'0Pf8/T7aBNYDQbwE8r05S2Tt3Du89Op0kxde/7OUX9nY6bIpqYcg3oJa2P9ZmVeYJXN7PyUz' b'Z1znrW+SRifPNeRvjeNy9OxJ2XfqSJISSs5BECVBsoYbAgjihitVlRBAECVBsoYbAgjihitV' b'lRBAECVBsoYbAgjihitVlRBAECVBsoYbAgjihitVlRBAECVBsoYbAgjihitVlRBAECVBsoYb' b'AgjihitVlRBAECVBsoYbAgjihitVlRBAECVBsoYbAgjihitVlRBAECVBsoYbAgjihitVlRBA' b'ECVBsoYbAgjihitVlRBAECVBsoYbAgjihitVlRBAECVBsoYbAgjihitVlRBAECVBsoYbAgji' b'hitVlRBAECVBsoYbAgjihitVlRBAECVBsoYbAgjihitVlRBAECVBsoYbAgjihitVlRBAECVB' b'soYbAgjihitVlRBAECVBsoYbAgjihitVlRBAECVBsoYbAgjihitVlRBAECVBsoYbAgjihitV' b'lRBAECVBsoYbAgjihitVlRBAECVBsoYbAgjihitVlRBAECVBsoYbAgjihitVlRBAECVBsoYb' b'AgjihitVlRBAECVBsoYbAgjihitVlRBAECVBsoYbAgjihitVlRBAECVBsoYbAj4FqZU3izEj' b'bhahKgQcELC23iiNLotb2YhILu5Jvdsqq0xe1sc9j+Mh0DUCNlrTKG18Im7/RIL0jZWHbY/Z' b'GbcZx0OgWwTMZHPJmeWbXorbP5EgU00KtcqYGFkatyHHQ6ALBNY2itXHk/RNLMglSeqVZpKm' b'nAMBnwQaxWo+ab+2BHlHktUisi7pAJwHAWcErGxvlKptPUxqW5Cp5fq2rlxs8+YWETMgRvqd' b'LUxhCFyJgJUTNjIHc5E9fGZkdNeVDr/S33dEkCs14e8hkFYCCJLW5JjbCwEE8YKZJmklgCBp' b'TY65vRBAEC+YaZJWAgiS1uSY2wsBBPGCmSZpJYAgaU2Oub0QQBAvmGmSVgIIktbkmNsLAQTx' b'gpkmaSWAIGlNjrm9EEAQL5hpklYC/wW+p4KkFYXPKQAAAABJRU5ErkJggg==') class TabTwo(wx.Panel): def __init__(self, parent): super(TabTwo, self).__init__(parent) text = wx.TextCtrl(self, style=wx.TE_MULTILINE, size=(250, 150)) class NrfxTool(wx.Frame): """hold all widgets""" def __init__(self, parent): super(NrfxTool, self).__init__(parent, style=wx.DEFAULT_FRAME_STYLE & ~(wx.RESIZE_BORDER | wx.MAXIMIZE_BOX)) self.settings = Settings() self.SetIcon(title_icon.getIcon()) self.SetTitle(self.settings.title) self.init_ui() self.welcome_message() def init_ui(self): vbox = wx.BoxSizer(wx.VERTICAL) #---------------------------------------- # 设置区域 self.nb = wx.Notebook(self) self.nb.AddPage(Programmer(self.nb), "Programmer") self.nb.AddPage(DfuImageGenerator(self.nb), "DFU Image Generater") self.nb.AddPage(About(self.nb), "About") #---------------------------------------- # log显示区域 btn_hbox = wx.BoxSizer(wx.HORIZONTAL) self.log_clear_btn = wx.Button(self, label='CLEAR LOG') self.log_open_btn = wx.Button(self, label='OPEN LOG FILE') self.log_clear_btn.Bind(wx.EVT_BUTTON, self.log_clear_btn_handler) self.log_open_btn.Bind(wx.EVT_BUTTON, self.log_open_btn_handler) btn_hbox.Add(self.log_clear_btn, flag=wx.EXPAND | wx.ALL) btn_hbox.Add(self.log_open_btn, flag=wx.EXPAND | wx.ALL) self.log_text = wx.TextCtrl(self, style=wx.TE_MULTILINE | wx.TE_READONLY | wx.VSCROLL) vbox.Add(self.nb) vbox.Add(btn_hbox) vbox.Add(self.log_text, proportion=1, flag=wx.EXPAND | wx.ALL) self.SetSizerAndFit(vbox) self.SetSize(self.settings.size) self.Centre() self.Show(True) # 实例化log模块,绑定输出到log显示区域 self.logger = LogUtils.sharedInstance('1') LogUtils.sharedInstance('nrfx_tool').set_ctrl_to_logging(self.log_text) self.logger.set_logger('nrfx_tool', 'logs') #print(self.nb.GetSize()) def log_clear_btn_handler(self, e): self.log_text.Clear() def log_open_btn_handler(self, e): log_file = self.logger.get_current_log_file() print('Log file: %s' % (log_file)) subprocess.Popen(r'explorer "logs"') def welcome_message(self): self.logger.info('Check for updates: %s' % self.settings.url) def main(): app = wx.App() frame = NrfxTool(None) app.MainLoop() if __name__ == "__main__": main()