2017-09-10 2 views
-2

현재 Python 2.7, Kivy 및 Sqlite3을 사용하여 응용 프로그램을 작성 중입니다. 나는이 값이 함수 choose_date_water에 있고 나는 다른 함수 view_water_figures에 그것을 전달하고 있기 때문에 Sqlite 테이블을 쿼리하는 데 사용할 수 있도록 text_input 위젯 (Kivy garden의 Date Picker) 값을 전달하는 데 문제가 있습니다. 나는 그것을 이해하기 위해 며칠 동안 노력했지만 많은 행운이 없었으며 약간의 도움이 필요했습니다.Python/Kivy의 다른 함수에서 한 함수에서 Sqlite3 쿼리로 변수를 전달하는 방법

  1. 첫 번째 함수의 변수를 두 번째 함수로 전달하는 방법은 무엇입니까?
  2. 이 변수를 사용하여 Sqlite 테이블을 올바르게 쿼리합니까 dp1?

관련 코드 :

class LogSheet(TabbedPanel): 


    def choose_date_water(self): 
     box = FloatLayout() 
     box.add_widget(Label(text = "Select Date To View", font_size = (30), pos_hint = {'center_x':0.5, 'center_y': 0.9 })) 
     #box.add_widget(TextInput(hint_text = "dd/mm/yyyy", font_size = (33), size_hint = (None, None), size = (300, 50), pos_hint = {'center_x':0.5, 'center_y': 0.6 })) 
     dp1 = box.add_widget(DatePicker(pHint_x = (0.35), pHint_y = (0.55), size_hint = (None, None), size = (190, 50), font_size = (33), pos_hint = {'center_x':0.5, 'center_y': 0.6 })) 

     btn1 = Button(text = "OK", size_hint = (None, None), size = (200, 50), pos_hint = {'center_x':0.5, 'center_y': 0.25 }) 

     box.add_widget(btn1) 

     popup1 = Popup(title = "Choose Date", title_size = (40), title_align = 'center', content = box, size_hint = (None, None), size = (600, 300)) 

     btn1.bind(on_press = self.view_water_figures, on_release = popup1.dismiss) 

     popup1.open() 
     return dp1 

    def view_water_figures(self): 
     conn = sqlite3.connect('logsheet.db') 
     c = conn.cursor() 

     conn.execute("SELECT today_total_dw_vol, today_total_fw_vol, total_evap_out FROM waterfigures WHERE date = ?", (dp1,)) 
     conn.commit() 
     wf = c.fetchall() 

     for item in wf: 
      I1 = str(item[1]) 
      I2 = str(item[2]) 
      I3 = str(item[3]) 

     box = FloatLayout() 
     box.add_widget(Label(text = "Total Dist Water Used: " + I1, pos_hint={'center_x':0.15, 'center_y': 0.9 })) 
     box.add_widget(Label(text = "Total Fresh Water Used: " + I2, pos_hint={'center_x':0.15, 'center_y': 0.8 })) 
     box.add_widget(Label(text = "Total #1 Evap Produced: " + I3, pos_hint={'center_x':0.15, 'center_y': 0.7 })) 



     btn1 = Button(text = "OK", size_hint = (None, None), size = (200, 50), pos_hint={'center_x': 0.25, 'center_y': .1}) 
     btn2 = Button(text = "Export Data To Excel", size_hint = (None, None), size = (200, 50), pos_hint={'center_x': 0.75, 'center_y': .1}) 

     box.add_widget(btn1) 
     box.add_widget(btn2) 

     popup2 = Popup(title='WATER FIGURES', title_size= (30), title_align = 'center', content = box, size_hint=(None, None), 
       size=(600, 500)) 

     btn1.bind(on_release = popup2.dismiss) 

     popup2.open() 


     c.close() 
     conn.close() 
+1

코드가 크며 질문을 나타내지 않습니다. 제발, 문제를 숙지하십시오. – RedEyed

+1

의견을 보내 주셔서 감사합니다. 관련없는 코드를 삭제했습니다. – Aiden

답변

1

self을 사용하여 날짜 선택에게 LogSheet 클래스의 멤버를 확인합니다. 그럼 당신은 self.dp1를 사용하여 같은 클래스의 다른 메소드 (함수)에서 액세스 할 수 있습니다

def choose_date_water(self): 
    box = FloatLayout() 
    box.add_widget(Label(text = "Select Date To View", font_size = (30), pos_hint = {'center_x':0.5, 'center_y': 0.9 })) 

    self.dp1 = box.add_widget(DatePicker(pHint_x = (0.35), pHint_y = (0.55), size_hint = (None, None), size = (190, 50), font_size = (33), pos_hint = {'center_x':0.5, 'center_y': 0.6 })) 
    # etc... 

지금 self.dp1이 클래스의 멤버와 그 클래스의 다른 메소드에 액세스 할 수 있습니다. 이 같은 view_water_figures()에 액세스 할 수 있습니다

def view_water_figures(self): 
    conn = sqlite3.connect('logsheet.db') 
    c = conn.cursor() 

    c.execute("SELECT today_total_dw_vol, today_total_fw_vol, total_evap_out FROM waterfigures WHERE date = ?", (self.dp1.text,)) 
    wf = c.fetchall() 
    # etc... 

첫째 쿼리가 아닌 연결을 실행하기 위해 커서를 사용합니다. 두 번째로 self.dp1을 사용하여 날짜 선택 도구에 액세스하십시오. 날짜 선택 도구는 사용자가 선택한 날짜 값을 포함하는 text 속성을 제공합니다 (어떤 위젯을 사용하고 있는지 확실하지 않음).

매개 변수화 된 쿼리의 사용은 정확하지만 데이터베이스에서 읽기 작업을 수행 할 때는 conn.commit()을 호출 할 필요가 없습니다.

+0

많은 도움을 주셔서 감사합니다. 지금 나는 DatePicker 위젯 (어떤 text_input 위젯입니다) 오류가 발생하고 있습니다 : AttributeError : 'NoneType'객체에 'text'속성이 없습니다. 그것은 내 질문에 다시 게시 할 수 있도록 내 원본에 대한 다른 문제입니다. – Aiden

+0

@ 에이 든 : 선택한 날짜가 포함 된 날짜 선택 도구의 특성을 파악하기 만하면됩니다. 그것은 텍스트 위젯을 기반으로하기 때문에'.text'일지도 모른다고 생각했습니다. – mhawke