python - Python 中 Kivy 小部件之间的交互

标签 python checkbox kivy

我正在使用 kivy 做一个项目,但我对复选框有疑问。起初我试图像 python 编码一样编写程序(我知道它不干净,但我了解更多)我有一个带有此编码的第一个屏幕:

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.uix.checkbox import CheckBox




class MainScreen(GridLayout):
    def __init__(self,**kwargs):
        e=[]
        super(MainScreen, self).__init__(**kwargs)
        self.cols=2
        def on_checkbox_active(checkbox, value):
            if value:
                e.append(value)
                print e
            else:
                print('The checkbox', checkbox, 'is inactive')

        self.add_widget(Label(text='Inserta assignatures desitjades',font_size=35))
        self.add_widget(Label(text=''))
        ch1 = CheckBox()
        self.add_widget(ch1)
        self.add_widget(Label(text='Termotecnia'))
        ch2 = CheckBox()
        self.add_widget(ch2)
        self.add_widget(Label(text='Termotecnia'))
        ch3 = CheckBox()
        self.add_widget(ch3)
        self.add_widget(Label(text='Termotecnia'))
        ch4 = CheckBox()
        self.add_widget(ch4)
        self.add_widget(Label(text='Termotecnia'))
        b1=Button(text='Exit',background_color=[0.7,0.7,1,1],font_size=24)  
        self.add_widget(b1)
        b2=Button(text='Next',font_size=24,font_color=[1,3,4,0],background_color=[1,2,3,6]) 
        self.add_widget(b2)
        ch1.bind(active=on_checkbox_active)
        ch2.bind(active=on_checkbox_active)
        b1.bind(on_press=exit)
        b2.bind(on_press=reloaded)
...

class SimpleKivy(App):
    def build(self):
        return MainScreen()


if __name__=='__main__':
    SimpleKivy().run()

例如,我想选择两个或三个选项,并将其保存到下一个屏幕,就像一种选择。如果有人知道如何做并为下一个屏幕保存信息,那将对我有很大帮助,因为我有下一个屏幕的所有选项的代码,但我想在第一个屏幕中预选,然后只使用我已选择。另外,如果有人可以帮助我,我想知道在按下“下一步”按钮时如何过渡到另一个类(class)(屏幕)。我知道这个问题很简单,但我是 kivy 编程的新手,有些概念非常困难。谢谢。

最佳答案

您想要的是访问其他类中的变量。有时这会很烦人,你可以用所有 __init__() 来做这件事。和东西,或者......一个更简单的方法出现了:它是 get_running_app() .

您可以创建一个字典或其他东西,您可以在其中存储您的其他类需要访问的任何值。它类似于使用 globals而且它花费你更少的代码行。例如,在您的情况下,您可以使用字典(或嵌套字典、json、...)来存储例如 'checkboxes':'<names of checked ones>'在每个初始化中,您可以遍历这些值以创建复选框 active

基本上您只需要 a = App.get_running_app()在 main - App - 类中访问某处和某物。

例子:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
Builder.load_string('''
<Root>:
    MainScreen:
        name: 'main'
    AnotherScreen:
        name: 'another'
<MainScreen>:
    BoxLayout:
        Button:
            text: 'next screen'
            on_release: root.parent.current='another'
        Button:
            text: 'ping!'
            on_release: root.ping()
<AnotherScreen>:
    BoxLayout:
        Button:
            text: 'previous screen'
            on_release: root.parent.current='main'
        Button:
            text: 'ping!'
            on_release: root.ping()
''')

class MainScreen(Screen):
    def __init__(self, **kw):
        super(MainScreen, self).__init__(**kw)
        self.a = App.get_running_app()
    def ping(self):
        print self.a.big_dict['hi']

class AnotherScreen(Screen):
    def ping(self):
        b = App.get_running_app()
        print b.big_dict['hi']

class Root(ScreenManager):
    pass
class SimpleKivy(App):
    big_dict={'hi':'hi there!'}
    def build(self):
        return Root()
SimpleKivy().run()

您可以看到不需要调用 __init__() ,如果你真的不需要,就不需要写更多的代码行。

关于python - Python 中 Kivy 小部件之间的交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35993548/

相关文章:

python - 加载表单后如何运行函数 Kivy

python - kivy 标签中的多行文本(python-bidi)

asp.net-mvc - Asp.Net Mvc Checkboxfor默认值?

Python:参数中的随机琐事琐事问题/答案

python - celery 守护进程 - 日志文件的权限被拒绝

Python : Regex search on a file, 和下一行中的另一个正则表达式

c# - 将自定义依赖属性添加到 XAML 中的控件模板

php - 如何禁用该复选框并使用 php 更新数据库

python - Kivy - 致命 Python 错误 : (pygame parachute) Segmentation Fault

python - 当 "cloning"对象时避免使用 clone = obj *1 是否有特殊原因?