python文件执行平台

来源:互联网 发布:mac上彻底删除软件 编辑:程序博客网 时间:2024/05/19 17:25
# -*- coding: utf-8 -*-__author__ = 'hejunwang'import wximport wx.xrcimport wx.auiimport sysimport threadingimport osimport time# from wx.lib.pubsub import Publisher# 统一使用utf-8格式default_encoding = 'utf-8'if sys.getdefaultencoding() != default_encoding:    reload(sys)    sys.setdefaultencoding(default_encoding)######################################################################### set the file filterwildcard1 = "All files (*.*)|*.*|" \            "Python source (*.py; *.pyc)|*.py;*.pyc"wildcard2 = "Python source (*.py; *.pyc)|*.py;*.pyc|" \            "All files (*.*)|*.*"######################################################################### threading.threadCMD_PYTHON  ='python 'class myThread(threading.Thread):    def __init__(self, threadID, path, counter, window):        threading.Thread.__init__(self)        self.threadID = threadID        self.window = window        self.path = path        self.counter = counter        self.timeToQuit = threading.Event()        self.timeToQuit.clear()    def stop(self):        self.timeToQuit.set()    def run(self):        print  ('start  thread--->') + self.name        # 更新界面        msg = "\nTest  Starting ... \n"        wx.CallAfter(self.window.LogMsg, msg)        while self.counter:            execname = CMD_PYTHON + self.path            os.system(execname)            print u"执行的脚本名称%s" % execname            print  (u'counter time-->%d') % self.counter            time.sleep(4)            msg = "当前执行线程名称-->%s\n执行脚本-->%s:\n执行当前次数-->%s\n" % (self.threadID, self.path, self.counter)            print ("线程名称-->%s:执行脚本-->%s:执行当前次数-->%s") % (self.threadID, self.path, self.counter)            wx.CallAfter(self.window.LogMsg, msg)            self.counter -= 1            print 'counter-->', self.counter            if self.counter == 0:                exitFlag = True                wx.CallAfter(self.window.updatabtn)        if exitFlag:            print (u'执行完成')            msg = "执行LogMessage最后一次线程名称-->%s:执行脚本-->%s:执行当前次数-->%s\n" % ( self.threadID, self.path, self.counter)            wx.CallAfter(self.window.LogMsg, msg)########################################################################class MyForm(wx.Frame):    # -------------------------------------------------------------------    # set the window layout    def __init__(self):        wx.Frame.__init__(self, parent=None, id=wx.ID_ANY, title=u"Python脚本执行", pos=wx.DefaultPosition,                          size=wx.Size(960, 540),                          style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)        self.threads = []        self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize)        self.m_mgr = wx.aui.AuiManager()        self.m_mgr.SetManagedWindow(self)        self.m_mgr.SetFlags(wx.aui.AUI_MGR_DEFAULT)        # self.m_panel8 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)        self.m_panel8 = wx.Panel(self, -1)        self.m_mgr.AddPane(self.m_panel8,                           wx.aui.AuiPaneInfo().Center().CaptionVisible(False).CloseButton(False).PinButton(                               True).Dock().Resizable().FloatingSize(wx.DefaultSize).BottomDockable(False).TopDockable(                               False).LeftDockable(False).RightDockable(False).Floatable(False))        # 绑定窗口的关闭事件        self.Bind(wx.EVT_CLOSE, self.OnWindowClose)        bSizer6 = wx.BoxSizer(wx.VERTICAL)        bSizer7 = wx.BoxSizer(wx.HORIZONTAL)        self.m_staticText2 = wx.StaticText(self.m_panel8, wx.ID_ANY, u"执行文件", wx.DefaultPosition, wx.DefaultSize, 0)        self.m_staticText2.Wrap(-1)        bSizer7.Add(self.m_staticText2, 0, wx.ALL, 5)        # 文件路径        self.path_text = wx.TextCtrl(self.m_panel8, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0)        bSizer7.Add(self.path_text, 1, wx.ALL, 5)        bSizer6.Add(bSizer7, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_TOP | wx.EXPAND, 5)        bSizer71 = wx.BoxSizer(wx.HORIZONTAL)        self.m_staticText21 = wx.StaticText(self.m_panel8, wx.ID_ANY, u"执行次数", wx.DefaultPosition, wx.DefaultSize, 0)        self.m_staticText21.Wrap(-1)        bSizer71.Add(self.m_staticText21, 0, wx.ALL, 5)        # 执行次数        self.count_text = wx.TextCtrl(self.m_panel8, wx.ID_ANY, u"1", wx.DefaultPosition, wx.DefaultSize, 0)        self.count_text.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_INFOBK))        bSizer71.Add(self.count_text, 1, wx.ALL, 5)        bSizer6.Add(bSizer71, 0, wx.EXPAND, 5)        # 文本显示数据        self.result_text = wx.TextCtrl(self.m_panel8, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize,                                       wx.HSCROLL | wx.TE_MULTILINE)        bSizer6.Add(self.result_text, 1, wx.ALL | wx.EXPAND, 5)        bSizer38 = wx.BoxSizer(wx.HORIZONTAL)        self.m_openBtn = wx.Button(self.m_panel8, wx.ID_ANY, u"&OPEN", wx.DefaultPosition, wx.DefaultSize, 0)        bSizer38.Add(self.m_openBtn, 1, wx.ALL, 5)        self.m_startbtn = wx.Button(self.m_panel8, wx.ID_ANY, u"&START", wx.DefaultPosition, wx.DefaultSize, 0)        bSizer38.Add(self.m_startbtn, 1, wx.ALL, 5)        self.m_stopBtn = wx.Button(self.m_panel8, wx.ID_ANY, u"&STOP", wx.DefaultPosition, wx.DefaultSize, 0)        bSizer38.Add(self.m_stopBtn, 1, wx.ALL, 5)        self.m_stopBtn.Disable()        bSizer6.Add(bSizer38, 0, wx.EXPAND, 5)        self.m_panel8.SetSizer(bSizer6)        self.m_panel8.Layout()        bSizer6.Fit(self.m_panel8)        # 状态栏        self.m_statusBar1 = self.CreateStatusBar(1, wx.ST_SIZEGRIP, wx.ID_ANY)        # 将状态栏分割为3个区域,比例为1:2:3        self.m_statusBar1.SetFieldsCount(2)        self.m_statusBar1.SetStatusWidths([-1, -2])        # #设置状态栏1内容        # self.statusbar.SetStatusText(u"鼠标位置:" + str(event.GetPositionTuple()), 0)        #        # #设置状态栏2内容        # self.statusbar.SetStatusText(u"当前线条长度:%s" % len(self.paint.curLine), 1)        self.m_menubar1 = wx.MenuBar()        menu = wx.Menu()        menu1 = wx.Menu()        self.menu_clear = menu.Append(-1, u'清除\tCtrl+D')  # 第一个下拉菜单        # 分割线        menu.AppendSeparator()        self.menu_select = menu.Append(-1, u'全选(N)\tCtrl+A')  # 快捷键   第二个下拉菜单        self.menu_exit = menu.Append(-1, u'退出(N)\tCtrl+Z')  # 快捷键   第二个下拉菜单        self.Bind(wx.EVT_MENU, self.OnSelect, self.menu_select)        self.Bind(wx.EVT_MENU, self.OnMenuClear, self.menu_clear)  # 绑定事件处理        self.Bind(wx.EVT_MENU, self.OnWindowClose, self.menu_exit)  # 绑定事件处理        # 添加到帮助下面        self.menu_help = menu1.Append(-1, u"更新版本")        self.Bind(wx.EVT_MENU, self.OnHelp, self.menu_help)  # 绑定事件处理        self.m_menubar1.Append(menu, u'文件(F)')        self.m_menubar1.Append(menu1, u'帮助(H)')        self.SetMenuBar(self.m_menubar1)        self.m_mgr.Update()        self.Centre(wx.BOTH)        # Connect Events        self.m_openBtn.Bind(wx.EVT_BUTTON, self.OPEN)        self.m_startbtn.Bind(wx.EVT_BUTTON, self.START)        self.m_stopBtn.Bind(wx.EVT_BUTTON, self.STOP)    # 版本说明    def OnHelp(self, event):        dialog = wx.MessageDialog(None, u"当前版本是V1.0", u'版本更新', wx.YES_NO | wx.ICON_QUESTION)        retCode = dialog.ShowModal()        if (retCode == wx.ID_YES):            print 'yes'        else:            print 'no'        dialog.Destroy()    def OnWindowClose(self, event):        print 'closewindows'        self.Destroy()    # 更新按键    def updatabtn(self):        self.m_startbtn.Enable()        self.m_stopBtn.Disable()    # 停止    def STOP(self, event):        self.StopThread()        self.uptext()        self.m_startbtn.Enable()        self.m_stopBtn.Disable()    def uptext(self):        print("STOP")        self.result_text.AppendText("\nSTOP")    # 停止线程    def StopThread(self):        while self.threads:            thread = self.threads[0]            thread.stop()            self.threads.remove(thread)    # 更新文本显示    def LogMsg(self, msg):        self.result_text.AppendText(msg)    # menu菜单    def OnSelect(self, event):        print("onSelect")        # self.path_text.SetValue(" ")        # # 文本显示数据        # self.result_text.SetValue(" ")        pass    def OnMenuClear(self, event):        print "onCLEAR"        self.path_text.SetValue(" ")        # 文本显示数据        self.result_text.SetValue(" ")    # 开始    def START(self, event):        count = self.count_text.GetValue()        print ('执行次数-->%s') % count        if self.path_text.GetValue() == '':            print "记得选择执行的文件哦!"        else:            print ('path-->%s') % paths            # 线程名称, 执行的python文件,执行的次数            thread1 = myThread('python thread', pathname, int(count), self)            self.threads.append(thread1)            thread1.start()            self.m_startbtn.Disable()            self.m_stopBtn.Enable()    def UpdataCtrl(self):        self.result_text.appendText("Worker  Threads %s" % (self.threads))    # 打开对话框    def OPEN(self, event):        """        Create and show the Open FileDialog        """        global paths, pathname        dlg = wx.FileDialog(            self, message="Choose a file",            defaultFile="",            wildcard=wildcard1,            style=wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR        )        if dlg.ShowModal() == wx.ID_OK:            tmp = ""            # paths = dlg.GetPaths()            paths = dlg.GetPaths()            # print "You chose the following file(s):"            for path in paths:                tmp = tmp + path                # print "tmp路径 %s" %tmp            # set the value of TextCtrl[filename]            self.path_text.SetValue(tmp)            print (u'textpath---- open-->'), tmp            # 得到文件的名称            pathname = tmp.split('\\')[-1]            # set the value to the TextCtrl[contents]            # file = open(self.m_textCtrl2.GetValue())            # self.m_textCtrl19.SetValue(file.read())            # file.close()            dlg.Destroy()  # Run the programif __name__ == "__main__":    app = wx.App()    frame = MyForm()    frame.Show()    app.MainLoop()