2017-05-28 64 views
1

我遇到了將動作分配給我在kivy中放入網格的按鈕的問題。任何幫助,將不勝感激。Kivy:分配網格中的動作/分類按鈕

我是所有編碼的新手,但我一直在努力解決這個問題。我試圖爲按鈕指定一個名稱,但它不起作用,因爲'on_press'函數不適用於字符串,只有一個按鈕。有沒有什麼辦法可以將我的字符串從網格中分類爲按鈕,還是我做的一切都是錯誤的?我希望每個按鈕都能執行不同的操作,因此不能將它們歸類爲同一件事。

這裏是我的代碼:

import kivy 
kivy.require('1.10.0') 
from kivy.uix.gridlayout import GridLayout 
from kivy.app import App 
from kivy.core.window import Window 
from kivy.uix.button import Button 


    class MyApp(App): 

     def build(self): 
      def callback(instance): 
       print('The button 1 is being pressed' % instance.text) 

      # test 1: I dont think this works because it doesn't work with the grid structure but I tried it anyways 
    # btn1 = Button(background_color=blue, text='a', size_hint_x=None, width=butw) 

    # test 2: I don't think it works because it is not classified as a button, but a string. 
    # btn1 = "layout.add_widget(Button(background_color=blue, text='a', size_hint_x=None, width=butw))" 

      btn1.bind(on_press=callback) 

      layout = GridLayout(cols=1, rows=28, row_force_default=True, row_default_height=buth) 
      layout.add_widget(Button(background_color=blue, text='a', size_hint_x=None, width=butw)) 
      layout.add_widget(Button(background_color=blue2, text='b', size_hint_x=None, width=butw)) 
      layout.add_widget(Button(background_color=blue, text='c', size_hint_x=None, width=butw)) 
    # cont. 
      return layout 

    MyApp().run() 

謝謝,瑞安

回答

0

所以,第12行,print('The button 1 is being pressed' % instance.text)你想格式化字符串,但你沒有指定把實例的文本。否則,此代碼,我編輯了一點點(請刪除下次舉例而言,所有不必要的代碼)工作正常,它打印時的「一」按鈕被按下:

import kivy 
kivy.require('1.10.0') 
from kivy.uix.gridlayout import GridLayout 
from kivy.app import App 
from kivy.uix.button import Button 


class MyApp(App): 

    def build(self): 
     def callback(instance): 
      print('The button 1 is being pressed', instance.text) 

     # test 1: I dont think this works because it doesn't work with the grid structure but I tried it anyways 
     btn1 = Button(text='a', size_hint_x=None, width=30) 

     btn1.bind(on_press=callback) 

     layout = GridLayout(cols=1, rows=28) 
     layout.add_widget(btn1) 
     layout.add_widget(Button(text='b', size_hint_x=None, width=30)) 
     layout.add_widget(Button(text='c', size_hint_x=None, width=30)) 

     return layout 

MyApp().run() 

App works fine

照此對於其他功能的其他按鈕,你就完成了。