【发布时间】:2017-01-17 16:01:01
【问题描述】:
所以我和我的朋友们一直在尝试在 kivy 上编写游戏,但我们被困在这一点上,我们无法弄清楚如何通过按下另一个按钮来更改按钮的颜色或图像。 游戏在棋盘中,我们正在尝试做 Fox & Hound 游戏,所以想法是当用户按下猎犬时,棋盘上的 2 个方块会亮起,指示您可以移动的位置,然后按下其中一个他们,将 de Hound 的图像更改为被按下的图像。
这是代码,希望你能帮助我,谢谢。
from kivy.app import App
from kivy.graphics import *
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.core.window import Window
from kivy.uix.popup import Popup
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.stacklayout import StackLayout
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.config import Config
Window.size = (800, 800)
intento = 0
nroboton= [0,0]
class MainWindow(GridLayout): # main class
def popbtns(self):
i = 3
self.add_widget(Label(text=' '))
self.add_widget(Btn(id=str(i+3), size=(100, 100), background_color=(0,0,0,1)))
i = i - 1
class Btn(Button): # button class
def on_release(self):
print('self.pos= ' + str(self.id))
def on_press(self):
global intento
if(intento == 1):
nroboton[1] = self.id
print('moviendose de ' + str(nroboton[0]) + 'a ' + str(nroboton[1]))
intento = 0
else:
nroboton[0] = self.id
intento = 1
print('llamada ssh ' + str(self.id))
class But(Button):
def new(self):
self.background_color=(0,250,0,1)
class Zorro(Button): # button class
def on_release(self):
print('self.pos= ' + str(self.id))
def on_press(self):
global intento
if(intento == 1):
nroboton[1] = self.id
print('moviendose de ' + str(nroboton[0]) + 'a ' + str(nroboton[1]))
intento = 0
else:
nroboton[0] = self.id
intento = 1
print('llamada ssh ' + str(self.id))
class MainApp(App):
def build(self):
main = MainWindow(cols=3, rows=1)
self.root = main # don't use global!
# make background
with main.canvas:
Rectangle(pos=main.pos, size=(10000,10000))
# populate gridlayout with Buttons
#main.add_widget(Debug(text='debug', background_color=(1, 0, 0, 1)))
main.popbtns()
# print position of buttons...
Clock.schedule_once(self.delayed_function, 0.1)
def delayed_function(self, dt):
self.print_buttons_pos()
def print_buttons_pos(self):
for child in self.root.children:
print(str(child) + ' pos is ' + str(child.id))
if __name__ == "__main__":
MainApp().run()
好的,这就是我可以减少的所有内容,希望对您有所帮助
【问题讨论】:
-
请将其缩减为minimal reproducible example。事实上,有很多额外的信息。也就是说,您应该只拥有一个带有两个按钮的 kivy 应用程序。
-
完成!或者至少我试图减少它。
-
仍然可以是way smaller.
标签: python python-2.7 python-3.x kivy kivy-language