Python 在 Kivy 中按下按钮时更新标签的文本
Update label's text when pressing a button in Kivy for Python
这是我的代码:我想制作一个游戏,当您按下按钮时 main_label 会更改文本,但我已经到处找了一个星期,但仍然不明白该怎么做。我查看了 Kivy 的网站,但我不明白。如您所见,我是 kivy 的新手,经验不多
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()
如何更新我的代码,以便通过按 help_button、main_label 更改其文本?
感谢您的帮助。
嗯!您的代码确实需要改进。 (你没经验我就明白了。)
改进:1
如果您 return 在 build() 上创建一个小部件,或者如果您设置
self.root。(你不应该在构建函数本身中制作所有的 gui。)
def build(self):
return Hello() #That's what is done here
改进:2
on_release/on_press两者总是有用的。
self.help_button = Button(text = "Help", size_hint=(.3, .1),pos_hint={'x':.65, 'y':.1},on_press = self.update)
改进:3
当按下 help_button 时,调用更新函数来更改 main_label 的文本。
def update(self,event):
self.main_label.text = "Changed to change"
这是你完整的改进代码
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 Hello(FloatLayout):
def __init__(self,**kwargs):
super(Hello,self).__init__(**kwargs)
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},on_press = self.update)
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})
self.add_widget(self.energy_label)
self.add_widget(self.main_label)
self.add_widget(self.time_label)
self.add_widget(self.inventory_button)
self.add_widget(self.help_button)
self.add_widget(self.craft_button)
self.add_widget(self.food_button)
self.add_widget(self.go_button)
self.add_widget(self.walk_button)
self.add_widget(self.name_label)
self.current_text = "Default"
def update(self,event):
self.main_label.text = "Changed to change"
class app1(App):
def build(self):
return Hello()
if __name__=="__main__":
app1().run()
另一种方法是,在 Kivy 中,kivy 语言属性右侧的所有内容都是纯 python。因此,您可以通过将一些标记传递给您的函数,将您的 kivy 文件连接到 python,然后根据需要在 python 中执行操作。
在 .kv 文件中:
Button:
on_press: root.label_change('btn1')
在 Python 文件中:
Class MyButton(Button):
def label_change(self, event):
self.event = event
if self.event == "btn1":
label.text = "something"
肮脏的小片段!
import kivy
kivy.require('1.9.1')
from kivy.app import App
from kivy.lang import Builder
from kivy.clock import Clock
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
import random,string
Builder.load_string('''
<updlbl>:
orientation: 'vertical'
Label:
id: updlbl
text: 'Update Label'
Button:
text: 'Click me'
on_press: root.upd('updated text')
''')
class updlbl(BoxLayout):
def __init__(self, **kwargs):
super(updlbl,self).__init__(**kwargs)
pass
def upd(self,txt):
self.ids.updlbl.text = txt
class UpdateLabel(App):
def build(self):
self.title = "Update Label"
return updlbl()
if __name__ == '__main__':
UpdateLabel().run()
这是我的代码:我想制作一个游戏,当您按下按钮时 main_label 会更改文本,但我已经到处找了一个星期,但仍然不明白该怎么做。我查看了 Kivy 的网站,但我不明白。如您所见,我是 kivy 的新手,经验不多
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()
如何更新我的代码,以便通过按 help_button、main_label 更改其文本?
感谢您的帮助。
嗯!您的代码确实需要改进。 (你没经验我就明白了。)
改进:1
如果您 return 在 build() 上创建一个小部件,或者如果您设置 self.root。(你不应该在构建函数本身中制作所有的 gui。)
def build(self):
return Hello() #That's what is done here
改进:2
on_release/on_press两者总是有用的。
self.help_button = Button(text = "Help", size_hint=(.3, .1),pos_hint={'x':.65, 'y':.1},on_press = self.update)
改进:3
当按下 help_button 时,调用更新函数来更改 main_label 的文本。
def update(self,event):
self.main_label.text = "Changed to change"
这是你完整的改进代码
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 Hello(FloatLayout):
def __init__(self,**kwargs):
super(Hello,self).__init__(**kwargs)
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},on_press = self.update)
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})
self.add_widget(self.energy_label)
self.add_widget(self.main_label)
self.add_widget(self.time_label)
self.add_widget(self.inventory_button)
self.add_widget(self.help_button)
self.add_widget(self.craft_button)
self.add_widget(self.food_button)
self.add_widget(self.go_button)
self.add_widget(self.walk_button)
self.add_widget(self.name_label)
self.current_text = "Default"
def update(self,event):
self.main_label.text = "Changed to change"
class app1(App):
def build(self):
return Hello()
if __name__=="__main__":
app1().run()
另一种方法是,在 Kivy 中,kivy 语言属性右侧的所有内容都是纯 python。因此,您可以通过将一些标记传递给您的函数,将您的 kivy 文件连接到 python,然后根据需要在 python 中执行操作。
在 .kv 文件中:
Button:
on_press: root.label_change('btn1')
在 Python 文件中:
Class MyButton(Button):
def label_change(self, event):
self.event = event
if self.event == "btn1":
label.text = "something"
肮脏的小片段!
import kivy
kivy.require('1.9.1')
from kivy.app import App
from kivy.lang import Builder
from kivy.clock import Clock
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
import random,string
Builder.load_string('''
<updlbl>:
orientation: 'vertical'
Label:
id: updlbl
text: 'Update Label'
Button:
text: 'Click me'
on_press: root.upd('updated text')
''')
class updlbl(BoxLayout):
def __init__(self, **kwargs):
super(updlbl,self).__init__(**kwargs)
pass
def upd(self,txt):
self.ids.updlbl.text = txt
class UpdateLabel(App):
def build(self):
self.title = "Update Label"
return updlbl()
if __name__ == '__main__':
UpdateLabel().run()