0

私はIronPythonを初めて使用し、固定フィールドファイルを区切りファイルに変換するWindowsフォームを使用して単純なアプリケーションを作成しようとしています。

3つのボタンを持つフォームを作成しました。

1つ目は、変換するファイルを選択することです。2つ目は、最初のファイルのレイアウトでファイルを選択することです。3つ目は、上記の2つのファイルのファイル名をファイルを変換するPython関数に送信するための[送信]ボタンです。

最初の2つのボタンは正常に機能します。私の問題は、ファイル名を「button_submitPressed」関数に渡すことです。FILENAMEとLAYOUTのグローバル変数を作成しようとしました(「HelloWorldForm」クラスの内外で試しましたが、どちらも機能していません)。

ボタンイベントで収集した変数を別の関数に渡すにはどうすればよいですか?

これを実行すると、送信ボタンをクリックすると(最初の2つをクリックし、ファイル名とレイアウトを選択した後)、次のエラーが発生します。

IronPython.Runtime.UnboundNameException: global name 'FILENAME' is not defined

ありがとう。

class HelloWorldForm(Form):
    FILENAME = ''
    LAYOUT = ''
    def __init__(self):
        self.Text = 'ff2delim'

        self.label = Label()
        self.label.Text = "Convert fixed legnth file to delimited"
        self.label.Location = Point(50, 50)
        self.label.Height = 30
        self.label.Width = 200

        self.count = 0

        button = Button()
        button.Text = "File name"
        button.Location = Point(50, 100)

        button.Click += self.buttonPressed

        button2 = Button()
        button2.Text = "Layout"
        button2.Location = Point(50, 130)

        button2.Click += self.button2Pressed

        button_submit = Button()
        button_submit.Text = "Convert"
        button_submit.Location = Point(50, 190)

        button_submit.Click += self.button_submitPressed

        self.Controls.Add(self.label)
        self.Controls.Add(button)
        self.Controls.Add(button2)
        self.Controls.Add(button_submit)


    def buttonPressed(self, sender, args):
        dialogf = OpenFileDialog()
        if dialogf.ShowDialog() == DialogResult.OK:
            FILENAME = dialogf.FileName
            print "FILENAME: " + FILENAME 
            self.label_filename = Label()
            self.label_filename.Text = FILENAME
            self.label_filename.Location = Point(140, 105)
            self.label_filename.Height = 30
            self.label_filename.Width = 200    
            self.Controls.Add(self.label_filename) 
        else:
            print "No file selected"

    def button2Pressed(self, sender, args):
        dialogl = OpenFileDialog()
        if dialogl.ShowDialog() == DialogResult.OK:
            LAYOUT = dialogl.FileName
            print "LAYOUT: " + LAYOUT 
            self.label_layout = Label()
            self.label_layout.Text = LAYOUT
            self.label_layout.Location = Point(140, 135)
            self.label_layout.Height = 30
            self.label_layout.Width = 200    
            self.Controls.Add(self.label_layout) 
        else:
            print "No file selected"

    def button_submitPressed(self, sender, args):
        convert(FILENAME,LAYOUT)
4

2 に答える 2

2

最初の 2 つのボタン ハンドラーにグローバル変数を入れることで、これを機能させることができました。

def buttonPressed(self, sender, args):
    global FILENAME
    dialogf = OpenFileDialog()
    if dialogf.ShowDialog() == DialogResult.OK:
        FILENAME = dialogf.FileName
        print "FILENAME: ",FILENAME
    ...

def button2Pressed(self, sender, args):
    global LAYOUT
    dialogl = OpenFileDialog()
    if dialogl.ShowDialog() == DialogResult.OK:
        LAYOUT = dialogl.FileName
        print "LAYOUT: " + dialogl.FileName
    ...

次に、3 番目のボタン ハンドラーで:

def button_submitPressed(self, sender, args):
    print "FILENAME SUB: ",FILENAME
    print "LAYOUT SUB: ",LAYOUT
    convert(FILENAME,LAYOUT)

次に、3 番目のボタン ハンドラーが convert 関数を正常に呼び出します。

于 2012-06-19T16:07:11.443 に答える