Unë jam duke bërë një projekt për universitetin tim duke përdorur kivy dhe python. Unë dua të bëj një ekran kryesor ku mund të zgjidhni disa fusha dhe më pas ekrani tjetër do të varet nga fushat që keni zgjedhur në ekranin kryesor. Të bësh dinamikë me gjuhën kv është e vështirë për mua, sepse nuk di shumë për programimin me kivy, kështu që kam vendosur të bëj si programimin python, por nuk funksionon. Këtu keni kodin e programit tim:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
Builder.load_string('''
<Root>:
MainScreen:
name: 'main'
AnotherScreen:
name: 'another'
<MainScreen>:
GridLayout:
cols: 2
Label:
text: "Select Subjects"
font_size: 15
Label:
text: " "
CheckBox:
on_active:root.ping('ch1')
Label:
text: "Termotecnia"
CheckBox:
on_active:root.ping('ch2')
Label:
text: "Control"
CheckBox:
on_active:root.ping('ch3')
Label:
text: "Termotcnia"
CheckBox:
on_active:root.ping('ch4')
Label:
text: "Control"
Button:
text: "Exit"
background_color: .7, .7, 6, 1
on_release:root.parent.current='another'
Button:
text: "Run"
font_size: 24
background_color: .7, .7, 1, 1
on_release: root.parent.current='another'
''')
class MainScreen(Screen):
def __init__(self, **kw):
super(MainScreen, self).__init__(**kw)
self.a = App.get_running_app()
self.e={}
def ping(self,n):
if self.a.big_dict[n]=='False':
self.a.big_dict[n]='True'
else:
self.a.big_dict[n]='False'
print self.a.big_dict
self.e=self.a.big_dict
class AnotherScreen(GridLayout):
def __init__(self, **kw):
super(AnotherScreen, self).__init__(**kw)
t=[]
self.i=MainScreen()
self.cols=2
self.add_widget(Button(text='Assignatura',background_color=[0,1,1,1]))
self.add_widget(Button(background_color=[0,1,1,1],text='Escriu Grup'))
for k in self.i.e:
if self.i.e[k]=='True':
self.add_widget(Label(text=k))
self.k=TextInput(multiline=False)
t.append(self.k.text)
self.add_widget(self.k)
else:
pass
b1=Button(text='Exit',background_color=[0,1,0,1])
self.add_widget(b1)
b2=Button(text='Run',background_color=[0,1,0,1])
self.add_widget(b2)
b1.bind(on_press=exit)
class Root(ScreenManager):
pass
class SimpleKivy(App):
big_dict={'ch1':'False','ch2':'False','ch3':'False','ch4':'False'}
def build(self):
return Root()
SimpleKivy().run()
Ky kod nuk funksionon sepse ScreenManager
punon vetëm me Screen
, jo me GridLayout
(problemi i parë). big_dict
ruan të dhënat e kutive të kontrollit, por kur përpiqem të importoj në një klasë tjetër, nuk funksionon (një problem tjetër). Nëse dikush e di përgjigjen e këtyre problemeve do të ishte shumë i dobishëm, sepse unë di të bëj me p.sh. Gjithmonë 13 fusha, por dua të bëj me një parazgjedhje, sepse ka shumë fusha (në këtë program vetëm 4, por ka 14).
BoxLayout
fëmijën eMainScreen
, dhe më pas shtoniLabel
dheGridLayout
si fëmijët e saj 15.03.2016