2016-11-20 4 views
-1

아래 코드에서 OptionMenu와 클릭 할 때 기능을 수행하는 버튼이있는 GUI가 있습니다. 드롭 다운 목록에서 첫 번째 옵션을 선택한 다음 버튼을 클릭하면 배열 statements 배열의 각 항목을 반복해야합니다.파이썬 for 루프는 수행되지만 루프는 수행되지 않습니다.

예를 들어, 각 조합이 결과를 생성하고 파일의 새 줄에 쓰기 위해 단추 뒤의 기능을 트리거하는 아래 조합을 원합니다.

  1. 첫 번째 옵션 - 첫 번째 문
  2. 첫 번째 옵션 - 두 번째 문
  3. 첫 번째 옵션 -

나중에 두 번째 옵션을 선택하는 경우에 세 번째 성명, 그것은 것입니다 1 차/2 차/셋째을 통해 다시 루프 성명서.

아마도 버튼을 클릭 할 때 파일에 기록 된 결과가 하나 밖에 없기 때문에 내 for-in 루프가 잘못된 위치에있을 수 있으며 잘못된 결과가 표시 될 수 있습니다 (내 기능이 문장 유사성을 계산하여 잘못된 var/string을 선택할 수 있습니다). 그리고 한 번 실행 후에 루프가 멈추지 않을 것입니다. , 별도로 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'에서 문자열로 아무 것도하지 않는 것처럼 보입니다. 또한 세미콜론은 무엇입니까? 파이썬은 자바 나 C와는 다르다. –

+0

'StringVar's에 대해서는 잘 모르지만'var2'가 정의되지 않은 것처럼 보입니다. - var1을 의미합니까? 아무것도하지 않을거야. – boboquack

답변

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

statement는 루프 본문 내에서 사용되지 않습니다 :

여기 내 코드입니다 세 번 반복 있기 때문에 그래서, 무슨 일이 있습니다 : 정말 유용하지이고 또한 연산의 선택에 의해 영향을받지 않습니다

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() 

이것은 작동합니다.