我正在使用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