2016-11-20 31 views
-1

以下のコードでは、OptionMenuとクリックしたときに機能を実行するボタンがあるGUIがあります。ドロップダウンリストから最初のオプションを選択し、ボタンをクリックすると、配列statementsの各項目がループします。Python forループですが、ループは実行されません

たとえば、ボタンの後ろにある機能をトリガーする(結果を生成してファイルの新しい行に書き込む)次の組み合わせが必要です。

  1. まずオプション - 最初の文
  2. まずオプション - 2番目のステートメント
  3. まずオプション -

その後3番目のステートメント2番目のオプションを選択すると、それは第1 /第2 /第3ループスルー再び意志でステートメント。

ボタンをクリックしたときにファイルに記録された結果が1つしかなく、結果が間違っているため、for-inループが間違った位置にある可能性があります(私の機能は文の類似点を計算して間違ったvar/stringを選ぶことができます)。そして、それは1回の実行の後で停止し、ループは起こらない。 、別にvar2は(あなたの例でエラーが発生する)あなたのコードに存在しないという事実から

import sys 
import tkinter 
import SemanticSim 

from tkinter import * 

master = Tk() 

a = IntVar() 

var1 = StringVar(master) 
var1.set("-- Choose One Option --") # initial value 
var2 = StringVar(master) 
x3 = StringVar() 
x3.set("Click the button to get result...") 

master.title("Graphical User Interface") 
master.geometry("800x600") 

########################################## METHODS ############################################## 
def ButtonClickMethod(): 
    a = var1.get() # get the text value of selected menu option 
    var1.set(a) # sets value to label when needed to, label needs to be set in specific manner 
    x1 = var1.get() 
    a = var2.get() 
    var2.set(a) 
    statements = ["First Statement", "Second Statement", "Third Statement"] 
    for statement in statements: 
     x2 = var2.get() # if I put `statement` in the bracket, I get this error: "TypeError: get() takes 1 positional argument but 2 were given" 
    x3.set(SemanticSim.SemanticSimilarity(x1, x2)); 
############################################################################################# 

b3 = Button(master, text="Calculate Results", command=ButtonClickMethod) 
b3.place(x=100, y=200) 

label1 = Label(master, text="Choose One Option ") 
label1.place(x=20, y=100) 

option1 = OptionMenu(master, var1, "First Option", "Second Option", "Third Option") 
option1.config(width=50) 
option1.pack() 
option1.place(x=200, y=100) 

CaptionLabelResult1 = Label(master, text="Semantic Analysis Result: ") 
CaptionLabelResult1.place(x=50, y=250) 

LabelResult1 = Label(master, textvariable=x3) 
LabelResult1.place(x=200, y=250) 

mainloop() 
+0

「コメント」とはあなたは '陳述'を意味しましたか? – Holloway

+0

あなたのコードは 'statements'の文字列で何もしていないようです。また、セミコロンは何ですか? PythonはJavaやCと似ていません。 –

+0

'StringVar'sについてよく分かりませんが、' var2'が定義されていないようです - 'var1'を意味するのですか?何もするつもりはない。 – boboquack

答えて

2
statements = ["First Statement", "Second Statement", "Third Statement"] 
for statement in statements: 
    x2 = var2.get() 

statementはループ本体内で使用されることはありません:

は、ここに私のコードです3回の反復があるので、そう、何が起こるかは、このです:本当に便利ではありませんし、また、オペアンプの選択によって影響されることはありません

x2 = var2.get() 
x2 = var2.get() 
x2 = var2.get() 

前に

+0

この行 'x3.set(SemanticSim.SemanticSimilarity(x1、x2));'は何かがバックグラウンドで起こる場所です。 'SemanticSim'は' x1'と 'x2'の間の類似点を計算することによって仕事をする機能を持っています – Shyuan

+1

しかし、その行は問題の部分の後に来ます。現在( 'var2'がない)それは実行されず、' x2'はステートメントに関係なく常に同じです(あなたが何をしようとしているのか分かりません)。 – poke

0
import sys 
import tkinter 
import SemanticSim 

from tkinter import * 

master = Tk() 

a = IntVar() 

var1 = StringVar(master) 
var1.set("-- Choose One Option --") # initial value 
var2 = StringVar(master) 
x3 = StringVar() 
x3.set("Click the button to get result...") 

master.title("Graphical User Interface") 
master.geometry("800x600") 

########################################## METHODS ############################################## 
def ButtonClickMethod(): 
    a = var1.get() # get the text value of selected menu option 
    var1.set(a) # sets value to label when needed to, label needs to be set in specific manner 
    a = var2.get() 
    var2.set(a) 
    statements = ["First Statement", "Second Statement", "Third Statement"] 
    for statement in statements: 
     x1 = var1.get() 
     x2 = statement 
     x3.set(SemanticSim.SemanticSimilarity(x1, x2)); 
############################################################################################# 

b3 = Button(master, text="Calculate Results", command=ButtonClickMethod) 
b3.place(x=100, y=200) 

label1 = Label(master, text="Choose One Option ") 
label1.place(x=20, y=100) 

option1 = OptionMenu(master, var1, "First Option", "Second Option", "Third Option") 
option1.config(width=50) 
option1.pack() 
option1.place(x=200, y=100) 

CaptionLabelResult1 = Label(master, text="Semantic Analysis Result: ") 
CaptionLabelResult1.place(x=50, y=250) 

LabelResult1 = Label(master, textvariable=x3) 
LabelResult1.place(x=200, y=250) 

mainloop() 

これは機能します。

関連する問題