私はこれで数日間頭を悩まされました。私はそれをPythonでのみ動作させました(.kvファイルを使用しない)が、今私はこれを理解できません。KivyからPythonへのコールバックにボタンをバインドします
基本的には、ラズベリーパイのGPIOを制御する一連のボタンがあります。 Pythonのみのバージョンでは、アクティブにするピンを決定するための右ボタン "テキスト"を探してIFのセリフで1回コールバックします。今、kivyバージョンでは、私は1つのボタンにダウンして、コード内の多くの場所にコールバックを移動しましたが、何も動作していないようです。ここで
はpytonのコードは次のとおりです。
# Set up GPIO:
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
defrost = 27
GPIO.setup(defrost, GPIO.OUT)
GPIO.output(defrost, GPIO.LOW)
class ConsoleUI(BoxLayout):
def press_callback(obj):
if obj.state == "down":
GPIO.output(defrost, GPIO.HIGH)
else:
GPIO.output(defrost, GPIO.LOW)
pass
class ConsolesimpleApp(App):
def build(self):
return ConsoleUI()
if __name__ == '__main__':
ConsolesimpleApp().run()
GPIO.cleanup()
ここKVのコードは次のとおりです。
# Console.kv
<ConsoleUI>:
ToggleButton:
id: Defrost
on_press: root.press_callback()
Image:
source: 'rear-window-defrost.png'
と現在のエラーメッセージ:
AttributeError: 'ConsoleUI' object has no attribute 'state'
はあなたが私を与えることができます任意のポインタをありがとう!
ボーナスの質問:ボタンごとに個別のコールバックを持つ方がよいか、「if obj.text ==」標準ですか?私はこの問題は、あなたが本当にこのケースでobj
がself
を言うと同じなので、BoxLayout(ConsoleUI
)の状態をチェックしてpress_callback(obj)
に何をしているか、である...
恐ろしい:
は、私が何を意味するか確認するために、この小さな例を実行してみてください!非常に完全な答えをありがとう。私は提案されたコードを試して、それは動作します!あなたはロック! – GroanMan
@GroanManあなたはウェルカムです:) – EL3PHANTEN
@GroanManはそれが受け入れられる回答か、他の何かを探していますか? – EL3PHANTEN