Mise à jour du texte de l'étiquette lors de l'appui sur un bouton dans Kivy pour Python
Voici mon code: je veux faire un jeu où le main_label modifications de texte lorsque vous appuyez sur un bouton, mais je l'ai cherché partout pendant une semaine et ne comprends toujours pas comment le faire. J'ai regardé sur Kivy du site, mais je ne comprends pas. Comme vous pouvez le voir je suis nouveau sur kivy et pas très expérimenté
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.floatlayout import FloatLayout
from kivy.clock import Clock
energy = 100
hours = 4
class app1(App):
def build(self):
self.f = FloatLayout()
#Labels
self.energy_label = Label(text = "Energy = " + str(energy), size_hint=(.1, .15),pos_hint={'x':.05, 'y':.9})
self.time_label = Label(text = "Hours = " + str(hours), size_hint=(.1, .15),pos_hint={'x':.9, 'y':.9})
self.name_label = Label(text = "Game", size_hint=(.1, .15),pos_hint={'x':.45, 'y':.9})
self.main_label = Label(text = "Default_text", size_hint=(1, .55),pos_hint={'x':0, 'y':.35})
#Main Buttons
self.inventory_button = Button(text = "Inventory", size_hint=(.3, .1),pos_hint={'x':.65, 'y':.2})
self.help_button = Button(text = "Help", size_hint=(.3, .1),pos_hint={'x':.65, 'y':.1})
self.craft_button = Button(text = "Craft", size_hint=(.3, .1),pos_hint={'x':.05, 'y':.1})
self.food_button = Button(text = "Food", size_hint=(.3, .1),pos_hint={'x':.35, 'y':.2})
self.go_button = Button(text = "Go", size_hint=(.3, .1),pos_hint={'x':.35, 'y':.1})
self.walk_button = Button(text = "Walk", size_hint=(.3, .1),pos_hint={'x':.05, 'y':.2})
def update(self, *args):
self.main_widget.text = str(self.current_text)
self.f.add_widget(self.energy_label)
self.f.add_widget(self.main_label)
self.f.add_widget(self.time_label)
self.f.add_widget(self.inventory_button)
self.f.add_widget(self.help_button)
self.f.add_widget(self.craft_button)
self.f.add_widget(self.food_button)
self.f.add_widget(self.go_button)
self.f.add_widget(self.walk_button)
self.f.add_widget(self.name_label)
self.current_text = "Default"
Clock.schedule_interval(update, 1)
return self.f
def update_label(input):
input = self.current_text
help_button.bind(on_press = update_label("success!"))
if __name__=="__main__":
app1().run()
Comment puis-je mettre à jour mon code, de sorte qu'en appuyant sur le help_button, main_label les modifications de son texte ?
Merci pour votre aide.
- pourriez-vous expliquer un peu plus sur ce que vous voulez?
Vous devez vous connecter pour publier un commentaire.
Bien! il y a un réel besoin d'amélioration dans votre code. (Je comprends bien que vous n'êtes pas expérimenté.)
Amélioration: 1
Une application peut être construit si vous retournez un widget sur build(), ou si vous définissez
auto.de la racine.(Vous ne devriez pas faire tout de l'interface graphique en fonction de création lui-même.)
Amélioration: 2
on_release/on_press les deux sont toujours utiles.
Amélioration: 3
Comme help_button est pressée, la fonction de mise à jour est appelé, ce qui modifie le texte de main_label.
Ici est complète de l'amélioration du code
print event.text
dans la fonction de mise à jour.if(event.text == "Help"): self.main_label.text = "Help button to change button" elif(event.text == "Go" ): self.main_label.text = "Go button to change button" else: pass
mais ce n'est pas une bonne méthode que le texte du bouton change.Bien d'une autre façon, vous pouvez aller à ce sujet est que, dans Kivy tout à droite de la kivy propriétés de langue est pure python. Vous pouvez donc brancher votre kivy fichiers python en passant par certaines tag à votre fonction et ensuite d'agir en python comment jamais vous le souhaitez.
Dans le .kv fichier:
Dans le fichier Python:
Sale petit extrait de!