0

作成しているwxpythonアプリのページの1つにゲージを追加しようとしています。

私の標準のPythonコードは、zipファイルのフォルダーを読み取り、CSVに書き込みます。

2つの質問があります。ゲージの範囲を検出されたファイルの数と一致させる方法と、ゲージの値を処理されたファイルの数に設定する方法です。

私のコード全体は以下のとおりです。

したがって、3ページ目にゲージを設定し、convertFilesが動作しているときに、ゲージをカウント値に更新する必要があります。

私はたくさんのチュートリアルを試し、たくさんの

オブジェクトの進行状況が定義されていません

私は本当に助けに感謝します

ありがとう

import wx
import wx.wizard as wiz
import sys
import glob
import os
import csv
import zipfile
import StringIO
from datetime import datetime


fileList = []
fileCount = 0
chosepath = ''
filecounter = 0
totalfiles = 0
count=0
saveout = sys.stdout
#############################

class TitledPage(wiz.WizardPageSimple):

    #----------------------------------------

    def __init__(self, parent, title):

        wiz.WizardPageSimple.__init__(self, parent)

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.SetSizer(self.sizer)

        title = wx.StaticText(self, -1, title)
        title.SetFont(wx.Font(16, wx.SWISS, wx.NORMAL, wx.BOLD))
        self.sizer.Add(title, 0, wx.ALIGN_LEFT|wx.ALL, 5)
        self.sizer.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.ALL, 5)



def main():

    wizard = wx.wizard.Wizard(None, -1, "Translator")
    page1 = TitledPage(wizard, "Welcome to the Translator")
    introText = wx.StaticText(page1, -1, label="This application will help translate from the \nmany ZIP files into seperate CSV files of the individul feature \nrecord types.\n\n\nPlease follow the instrcutions on each page carefully.\n\n\nClick NEXT to Begin")
    introText.SetFont(wx.Font(12, wx.DEFAULT, wx.NORMAL, wx.NORMAL))
    page1.sizer.Add(introText)


    page2 = TitledPage(wizard, "Find Data")
    browseText = wx.StaticText(page2, -1, label="Click the Browse Button below to find the folder of ZIP files")
    browseText.SetFont(wx.Font(11, wx.DEFAULT, wx.NORMAL, wx.NORMAL))
    page2.sizer.Add(browseText)

    zip = wx.Bitmap("zip.png", wx.BITMAP_TYPE_PNG)#.ConvertToBitmap()
    browseButton = wx.BitmapButton(page2, -1, zip, pos=(50,100))    
    wizard.Bind(wx.EVT_BUTTON, buttonClick, browseButton)


    filelist = wx.TextCtrl(page2, size=(250,138), pos=(225, 100), style = wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL)
    redir=RedirectText(filelist)
    sys.stdout=redir    

    page3 = TitledPage(wizard, "Convert ZIP Files to CSV files")
    listfilesText = wx.StaticText(page3, -1, label="Click the following button to process the ZIP files")
    listfilesText.SetFont(wx.Font(11, wx.DEFAULT, wx.NORMAL, wx.NORMAL))
    page3.sizer.Add(listfilesText)

    convert = wx.Image("convert.png", wx.BITMAP_TYPE_PNG).ConvertToBitmap()
    convertButton = wx.BitmapButton(page3, -1, convert, pos=(50,100))
    wizard.Bind(wx.EVT_BUTTON, convertFiles, convertButton)

    wizard.progress = wx.Gauge(page3, range=totalfiles, size=(250,25), pos=(225,150))
    wizard.progress.SetValue(0)

    wizard.FitToPage(page1)
    wx.wizard.WizardPageSimple.Chain(page1, page2)
    wx.wizard.WizardPageSimple.Chain(page2, page3)

    wizard.RunWizard(page1)

    wizard.Destroy()


def convertFiles(wizard, count=0):


    for name in fileList:
        base = os.path.basename(name)
        filename = os.path.splitext(base)[0]            

        dataFile = filename
        dataDirectory = os.path.abspath(chosepath)
        archive = '.'.join([filename, 'zip'])
        fullpath = ''.join([dataDirectory,"\\",archive])
        csv_file = '.'.join([dataFile, 'csv'])


        filehandle = open(fullpath, 'rb')
        zfile = zipfile.ZipFile(filehandle)
        data = StringIO.StringIO(zfile.read(csv_file)) 
        reader = csv.reader(data)

        for row in reader:
            type = row[0]
            if "10" in type:
                write10.writerow(row)
            elif "11" in type:
                write11.writerow(row)

        data.close()
        count = count +1

        print ("Processing file number %s out of %s")%(count,totalfiles)

        wizard.progress.SetValue(count)#this is where I thought the SetValue would work

    print ("Processing files completed, time taken: ")
    print(datetime.now()-startTime)
    print "Please now close the appplication"

def folderdialog():
    dialog = wx.DirDialog(None, "Choose a directory", style=1 )
    if dialog.ShowModal() == wx.ID_OK:
        chosepath = dialog.GetPath()
    dialog.Destroy()
    return chosepath

def buttonClick(self):
    global chosepath
    chosepath = folderdialog()
    print ("The folder picked was")
    print chosepath

    for dirname, dirnames, filenames in os.walk(chosepath):
        for filename in filenames:
            if filename.endswith((".zip")):
                fileList.append(filename)

                print (filename)

    global totalfiles
    totalfiles = len(fileList)
    print "Total Number of files found :", totalfiles

class RedirectText:
    def __init__(self,textDisplay):
        self.out=textDisplay

    def write(self,string):
        self.out.WriteText(string)





if __name__ == "__main__":
    app = wx.App(False)
    main()
    app.MainLoop()
4

1 に答える 1

0

ディレクトリで見つかったファイルの数が必要な場合は、Pythonのglobモジュールを使用するのが好きです。それはあなたがちょうど長さをつかむことができる結果のリストを返します。zipファイル内のファイル数が必要な場合は、Pythonのzipfileモジュールを使用して、namelist()メソッドを使用してファイルを引き出すことができると思います。

これで邪魔にならないので、ファイルリストの長さをゲージの「範囲」パラメータとしてwx.Gaugeウィジェットを作成できます。次に、convertFiles()メソッドの最後で、ゲージのSetValue()メソッドを呼び出すだけです。wxPythonデモには例があります。

于 2012-10-02T13:42:24.667 に答える