python文件执行平台

# -*- coding: utf-8 -*-
__author__ = 'hejunwang'

import wx
import wx.xrc
import wx.aui
import sys

import threading
import os
import 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 filter
wildcard1 = "All files (*.*)|*.*|" \
            "Python source (*.py; *.pyc)|*.py;*.pyc"
wildcard2 = "Python source (*.py; *.pyc)|*.py;*.pyc|" \
            "All files (*.*)|*.*"
########################################################################
# threading.thread


CMD_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 program


if __name__ == "__main__":
    app = wx.App()
    frame = MyForm()
    frame.Show()
    app.MainLoop()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值