2017-10-01 1 views
0

입력 필드의 사용자가 입력 한 값을 사용하여 동시에 여러 수학 방정식을 수행하려는 버튼을 누르면 목록에서 클래스로 여러 인스턴스 이름을 시도합니다 .tkinter 버튼을 사용하여 클래스에 목록 값 전달

예를 들면 다음과 같습니다. aud_non_comm_short/aud_non_comm_long & cad_non_comm_short/cad_non_comm_long 및 둘 다에 대한 결과를 레이블에 표시합니다. 당신이 그 (것)들에게 같은 이름 때문에 당신은, 당신의 변수와 함수의 이름을 엉망

from tkinter import * 
from tkinter import ttk 

class CoTValues: 

    def non_comm_short(self, master, e_row): 
     self.master = master 
     self.e_row = e_row 
     self.non_comm_short = IntVar() 
     entry = Entry(self.master, textvariable=self.non_comm_short, width="9") 
     entry.grid(row=self.e_row, column="1", padx="5", pady="5") 

    def non_comm_long(self, master, e_row): 
     self.master = master 
     self.e_row = e_row 
     self.non_comm_long = IntVar() 
     entry = Entry(self.master, textvariable=self.non_comm_long, width="9") 
     entry.grid(row=self.e_row, column="2", padx="5", pady="5") 

    def display_data(self): 
     print(self.non_comm_short.get()) 
     print(self.non_comm_long.get()) 

root = Tk() 
root.minsize(width="500", height="500") 

aud_non_comm_short = CoTValues() 
aud_non_comm_short.non_comm_short(root, 1) 

aud_non_comm_long = CoTValues() 
aud_non_comm_long.non_comm_long(root, 1) 

cad_non_comm_short = CoTValues() 
cad_non_comm_short.non_comm_short(root, 2) 

cad_non_comm_long = CoTValues() 
cad_non_comm_long.non_comm_long(root, 2) 

var_name = [aud_non_comm_short, aud_non_comm_long] 

btn = ttk.Button(root, text="Submit", command=lambda: for x in range(len(var_name): var_name[x].display_data()) 
btn.grid(row="4", column="3") 

root.mainloop() 
+0

왜이 경우'람다 '를 사용하고 있습니까? 왜 그냥 정상적인 기능을 호출하지? –

답변

0

:

가 나는 버튼을 통해 람다로 값을 전달에 문제가 있습니다. 람다 단추 호출이 작동하지 않아서 기능이 변경되었습니다. 이것은 일을하지만 더러운 해결책입니다. 그래서 당신은 단순히 그것을 향상시킬 수 있습니다.

from tkinter import * 
from tkinter import ttk 

class CoTValues: 

    def define_non_comm_short(self, master, e_row): 
     self.master = master 
     self.e_row = e_row 

     self.non_comm_short = IntVar() 
     self.entry = Entry(self.master, textvariable=self.non_comm_short, width="9") 
     self.entry.grid(row=self.e_row, column="1", padx="5", pady="5") 

    def define_non_comm_long(self, master, e_row): 

     self.master = master 
     self.e_row = e_row 

     self.non_comm_long = IntVar() 
     self.entry = Entry(self.master, textvariable=self.non_comm_long, width="9") 
     self.entry.grid(row=self.e_row, column="2", padx="5", pady="5") 

    def display_data(self, var_name): 
     for v in var_name: 
      print('') 
      print(v.entry.get()) 
     print("-------------") 

#-------------------------- 
def button_func(var_name): 
    aud_non_comm_short.display_data(var_name) 

#---------- main ---------- 
root = Tk() 
root.minsize(width="500", height="500") 

aud_non_comm_short = CoTValues() 
aud_non_comm_short.define_non_comm_short(root, 1) 

aud_non_comm_long = CoTValues() 
aud_non_comm_long.define_non_comm_long(root, 1) 

cad_non_comm_short = CoTValues() 
cad_non_comm_short.define_non_comm_short(root, 2) 

cad_non_comm_long = CoTValues() 
cad_non_comm_long.define_non_comm_long(root, 2) 

var_name = [aud_non_comm_short, aud_non_comm_long] 

btn = ttk.Button(root, text="Submit", command= lambda: button_func(var_name)) 
btn.grid(row="4", column="3") 
root.mainloop() 
+0

고마워요.이게 내 문제를 해결해 줬어. 너희 둘은 굉장해 !! –