gpt4 book ai didi

python - 如何获取 kivy 按钮的 Id 和 Text 值作为字符串?

转载 作者:太空宇宙 更新时间:2023-11-04 09:57:36 25 4
gpt4 key购买 nike

我有一个带有多个按钮的应用程序,我需要在按下按钮时将按钮的 ID 和文本值作为字符串获取。抓取的按钮的 ID 和文本值将被传递给另一个函数以进行进一步处理。为简单起见,我编写了这个示例程序。

# main.py

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout

########################################################################
class KVMyHBoxLayout(BoxLayout):
pass


########################################################################
class ExampleApp(App):
def Pressbtn(self, *args):
print'Pressed button'
#----------------------------------------------------------------------
def build(self):

return KVMyHBoxLayout()

#----------------------------------------------------------------------
if __name__ == "__main__":
app = ExampleApp()
app.run()

kv 文件

<MyButton@Button>:
color: .8,.9,0,1
font_size: 32

<KVMyHBoxLayout>:
orientation: 'vertical'
MyButton:
id:"idBtn1"
text: "Btn1"
background_color: 1,0,0,1
on_press:app.Pressbtn()
MyButton:
id:"idBtn2"
text: "Btn2"
background_color: 0,1,0,1
on_press:app.Pressbtn()
Label:
text: "ID"
background_color: 0,0,1,1
Label:
text: "Text"
background_color: 1,0,1,1

当按下按钮时,其对应的 id 和 text 值将显示在 ID 和 Text 标签中。目前上面的代码只在按下按钮时打印 Pressed button 。我想知道如何通过 Python 方式获取按钮的 ID 和文本值。

最佳答案

首先,当从 kv 调用时,必须将按钮实例显式传递给方法:

on_press: app.Pressbtn(self)

然后您可以使用实例引用来修改按钮或查看其属性,您不需要id。如果要获取 id,只能使用按钮父级的 ids 字典。

基于您的代码的示例:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder

kv_file = '''
<MyButton@Button>:
color: .8,.9,0,1
font_size: 32

<KVMyHBoxLayout>:
orientation: 'vertical'
MyButton:
id:"idBtn1"
text: "Btn1"
background_color: 1,0,0,1
on_press:app.Pressbtn(self)
MyButton:
id:"idBtn2"
text: "Btn2"
background_color: 0,1,0,1
on_press:app.Pressbtn(self)
Label:
id: lobj
text: "Object"
background_color: 1,0,1,1

Label:
id: lid
text: "ID"
background_color: 0,0,1,1
Label:
id: ltext
text: "Text"
background_color: 1,0,1,1
'''


class KVMyHBoxLayout(BoxLayout):
pass

class ExampleApp(App):
def Pressbtn(self, instance):
instance.parent.ids.lobj.text = str(instance)
instance.parent.ids.ltext.text = instance.text
instance.parent.ids.lid.text= self.get_id(instance)

def get_id(self, instance):
for id, widget in instance.parent.ids.items():
if widget.__self__ == instance:
return id

def build(self):
Builder.load_string(kv_file)
return KVMyHBoxLayout()

if __name__ == "__main__":
app = ExampleApp()
app.run()

输出:

enter image description here

编辑:

如果您在 .py 文件中定义小部件(按钮),则不需要将实例传递给函数,它会作为参数自动传递:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.button import Button
from kivy.uix.scrollview import ScrollView


class FirstScreen(Screen):
def __init__(self,**kwargs):
super(FirstScreen, self).__init__(**kwargs)
layout=BoxLayout(orientation="vertical",size_hint_y= None)
layout.bind(minimum_height=layout.setter('height'))
for i in range(50):
btn = Button(text="Button"+str(i),
id=str(i),
size_hint=(None, None),
on_press=self.Press_auth) #<<<<<<<<<<<<<<<<
layout.add_widget(btn)
root = ScrollView()
root.add_widget(layout)
self.add_widget(root)

def Press_auth(self,instance):
print(str(instance))

class TestScreenManager(ScreenManager):
def __init__(self, **kwargs):
super(TestScreenManager, self).__init__(**kwargs)
self.add_widget(FirstScreen())

class ExampleApp(App):
def build(self):
return TestScreenManager()

def main():
app = ExampleApp()
app.run()

if __name__ == '__main__':
main()

关于python - 如何获取 kivy 按钮的 Id 和 Text 值作为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45171309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com