So speichern Sie Daten in einer Variablen, indem Sie mithilfe des Widget-Bedienfelds auf eine Schaltfläche klicken

  • In Mathematica versuche ich, einen Algorithmus zu implementieren, für den ich eine benutzerfreundliche Oberfläche haben möchte. Ich habe es geschafft, ein Panel mit Widgets zu erstellen, aber wenn ich versuche, den Wert bereitzustellen Wenn Sie auf die Schaltfläche "Senden" klicken, passiert nichts.

    Ich habe das folgende Ereignis erstellt:

    BindEvent ["action", Script [buttonClicked []]

    Wenn also auf die Schaltfläche geklickt wird, muss buttonClicked [] ausgeführt werden, das die Prüfung auf enthält das Textfeld. Es passiert jedoch nichts, wenn Sie auf Senden klicken. Könnten Sie mir bitte dabei helfen.

     Needs["GUIKit`"];
    ref = GUIRun[Widget["Panel",
    
       {Widget[
         "Label", {"text" -> 
           "Please provide the following coefficients:"},
         WidgetLayout -> {"Alignment" -> Center}, Name -> "mainLabel"],
    
        WidgetSpace[10],
        {Widget["Label", {"text" -> "  Value for p1"}],
         Widget["TextField", {"columns" -> 6}, Name -> "p1_tf"],
         Widget["Label", {"text" -> "            "}]
         },
        WidgetSpace[10],
        {WidgetFill[], 
         Widget["Button", {"text" -> "Submit", 
           BindEvent["action", Script[buttonClicked[]]]}, 
          Name -> button1], WidgetFill[]
         }
        }
       ]]
    
    ImaginaryQ[expr_] := ! FreeQ[expr, _Complex];
    
    Script[
     buttonClicked[] := (If [
         ImaginaryQ@p1_tf == 
          False, {MessageDialog [ 
           "The provided value is not valid. You need to enter complex value"], Exit[]}];)
        ]
    
    GUIScreenShot[ref];
    
    p[[1]] = p1_tf; (*p1*)  
    Print["p1=", p[[1]]];
     
    15 May 2012
    dbrJace
2 answers
  • Wenn GUIkit nicht wirklich eine Voraussetzung ist, können Sie die in Mathematica vorhandenen Standardsteuerelemente in allen Versionen ab Version 6 ausprobieren:

     Panel[
     Column[
      {
       "Please provide the following coefficients:",
       "  Value for p1",
       InputField[Dynamic[p1tf]],
       "            ",
       Button[
        "Submit", (If[
           ImaginaryQ@p1tf == False, 
           {
             MessageDialog["The provided value is not valid. You need to enter complex value"], 
             Exit[]
           }
         ];)]
       }
      ]
     ]
     

    So speichern Sie Daten in einer Variablen, indem Sie mithilfe des Widget-Bedienfelds auf eine Schaltfläche klicken

    15 May 2012
    Sjoerd C. de Vries
  • Dies funktioniert (fühlt sich jedoch umständlich an)

     p1 = DialogInput[{p1 = 0 + 0 I}, 
       Column[{"Type a value for p1", InputField[Dynamic[p1], String], 
         Button["Proceed", DialogReturn[ToExpression@p1], 
         ImageSize -> Automatic]}]];
    If[NumericQ@p1, Print[p1], 
      MessageDialog["You need to enter a complex value for p1."]];
     

    Manipulate könnte viel besser funktionieren:

     Manipulate[p1 = a + b I, {a, 0, 10}, {b, 0, 10}, 
      Button["Run the algorithm!", Print[p1]]]
     
    15 May 2012
    dbrJace