1

もっといい書き方がないか考えてみました。以下に示す現在のコードは機能します。もっと良い方法がないか考えてみました。

これは検証用です。そのため、if ステートメントはすべての必須フィールドをチェックし、それらが受け入れられる場合は、実行コードに進みます。問題が発生したのは、

self.text_fmax

整数として受け入れられませんでした。したがって、この特定のフィールドは、最初に空であるかどうかがチェックされ、次に無視されます。そうでない場合、値は 0 から 180 までの整数でなければなりません。

  def call_back(self):
    if len(self.text_n.get()) == 0:
        tkMessageBox.showinfo("Mandatory Information", "Please input an integer value for Number of Tessellations Cells")
    elif len(self.text_id.get()) == 0:
        tkMessageBox.showinfo("Mandatory Information", "Please input an integer value for Tessellation Identifier")
    elif len(domain_container) == 0:
        tkMessageBox.showinfo("Mandatory Information", "Please input Domain")
    elif len(self.text_fmax.get()) != 0:
        a = int(self.text_fmax.get())
        if a < 0 or a > 180:
            tkMessageBox.showinfo("Incorrect Value", "Face Flatness should be less than 180")
        elif len(filename4) == 0:
            tkMessageBox.showinfo("Mandatory Information", "Please input Output File Name")
        else:
            self.execute_neper_code()
    elif len(filename4) == 0:
        tkMessageBox.showinfo("Mandatory Information", "Please input Output File Name")
    else:
        self.execute_neper_code()
4

2 に答える 2

2

コードと文字列の繰り返しを避けたい場合は、以下の方法を試すことができます。以下は完全なコードではありませんが、簡単な例です。dict のキーは、t_msgs検証対象のフィールドと検証対象の値 (範囲を指定できます) を表します。

def call_back(self):
    t_msgs = {"mdt": "Mandatory Information",
              "incrt_val" :"Incorrect Value"}
    checkFields = {(self.text_n, 0): 
                    (t_msgs["mdt"], 
                     "Please input an integer value for Number of Tessellations Cells"),
                   (self.text_id, 0): 
                    (t_msgs["mdt"], 
                     "Please input an integer value for Tessellation Identifier"),
                   (domain_container, 0): 
                    (t_msgs["mdt"], 
                     "Please input Domain"),
                   (self.text_fmax, range(0, 181, 180)): 
                    (t_msgs["incrt_val"], 
                     "Face Flatness should be less than 180"),
                   (len(filename4), 0): 
                    (t_msgs["mdt"], 
                     "Please input Output File Name")}

    for field in checkFields:
        if not field[1]:
            tkMessageBox.showinfo(checkFields[field][0], checkFields[field][1])
        else:
            if not (field[1][0] < field[0].get() < field[1][1]):
                tkMessageBox.showinfo(checkFields[field[0]], checkFields[field][1])
于 2016-03-04T01:50:25.870 に答える
1

通常、チェックする必要はありませんlen == 0。オブジェクトの「真偽」をテストするだけです。

def call_back(self):
    show = tkMessageBox.showinfo
    if not self.text_n.get():
        show("Mandatory Information", "Please input an integer value for Number of Tessellations Cells")

    elif not self.text_id.get():
        show("Mandatory Information", "Please input an integer value for Tessellation Identifier")

    elif not domain_container:
        show("Mandatory Information", "Please input Domain")

    elif self.text_fmax.get() and not 0 <= int(self.text_fmax.get()) <= 180:
        show("Incorrect Value", "Face Flatness should be less than 180")

    elif not filename4:
        show("Mandatory Information", "Please input Output File Name")

    else:
        self.execute_neper_code()
于 2016-03-04T01:17:50.660 に答える