2017-09-10 13 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番目の関数に渡すにはどうすればよいですか?
  2. この変数dp1を使用してSqliteテーブルを正しく照会していますか?

関連するコード:

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

@Aiden:選択した日付が日付ピッカーのどの属性に含まれているか把握するだけです。それはテキストウィジェットに基づいているので、私はそれが '.text'かもしれないと推測しましたが、そうではないかもしれません。 – mhawke

関連する問題