qpython怎么用kivy_Python中Kivy小部件之间的交互

我正在使用kivy做一个proyect,但我的复选框有问题.起初我正在尝试像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()

例如,我想选择两个或三个选项,并将其保存到下一个屏幕,就像一种选择.如果有人知道怎么做并保存下一个屏幕的信息它会帮助我很多,因为我有所有选项的下一个屏幕的代码,但我想在第一个屏幕预选然后只使用哪个我选择了.此外,如果有人可以帮助我,我想知道按下“下一步”按钮时转换到另一个类(屏幕).我知道这个问题很简单,但我是kivy编程的新手,有些概念很难.谢谢.

解决方法:

你想要的是访问其他类中的变量.有时这可能很烦人,你可以用所有__init __()和东西来做这件事,或者……一种简单的方法出现:它是get_running_app().

您可以创建字典或其他内容,您可以在其中存储其他类需要访问的任何值.它类似于使用全局变量,而且代价很少.例如,在您的情况下,您可以使用字典(或嵌套字典,json,…)来存储例如“复选框”:’‘并且在每个init中,您可以遍历这些值以使复选框处于活动状态

基本上你需要的是一个= 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('''

:

MainScreen:

name: 'main'

AnotherScreen:

name: 'another'

:

BoxLayout:

Button:

text: 'next screen'

on_release: root.parent.current='another'

Button:

text: 'ping!'

on_release: root.ping()

:

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 __(),如果你真的不需要,就不需要编写更多行代码.

标签:kivy,python,checkbox

来源: https://codeday.me/bug/20190925/1816850.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值