Нет необходимости или целесообразно использовать глобальные переменные.В этом нет необходимости, поскольку изменение значения глобальной переменной не уведомляет об изменении копий и не рекомендуется, поскольку его трудно отладить (дополнительную информацию читайте Почему глобальные переменные являются злыми? ).
В этом случае решение заключается в использовании StringProperty
, который можно подключить к обратному вызову для обновления данных.С другой стороны, вы должны реализовать логику запроса в методе, чтобы он мог вызываться несколько раз.Я реструктурировал ваш проект с учетом вышеизложенного, и решение состоит в следующем:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen
from kivy.properties import StringProperty
import sqlite3
class Main_Screen(Screen):
difficult = StringProperty()
class Urec_facilities(Screen):
pass
class AdventureDirectory(Screen):
pass
class BoulderingDirectory(Screen):
rows = StringProperty("")
def load_from_difficult(self, difficult):
connection = sqlite3.connect("workoutData.db")
cursor = connection.cursor()
cursor.execute("SELECT * FROM workoutData WHERE Activity = 'Bouldering' and Difficulty = ?", (difficult,))
self.rows = str(cursor.fetchall())
root_widget = Builder.load_string("""
ScreenManager:
Main_Screen:
name: 'mainScreen'
on_difficult: bouldering.load_from_difficult(self.difficult)
Urec_facilities:
name: 'urecFac'
AdventureDirectory:
name: 'AdventureDirectory'
BoulderingDirectory:
id: bouldering
difficult: 'Beginner'
name: 'BoulderingDirectory'
<Main_Screen>:
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: "mainScreenImage.png"
Label:
text: "Select your dificulty"
font_size: 50
color: (0.9,0.8,0,1)
background_color: (0,0,0,0)
pos_hint: {"x": 0, "y": 0.20}
Button:
text: 'Beginner'
font_size: 30
size_hint: 0.2,0.2
color: (0.9,0.8,0,1)
background_color: (0,0,0,0)
pos_hint: {"x": 0.16, "y": 0.1}
on_release:
root.difficult = "Beginner"
app.root.current = 'urecFac'
Button:
text: 'Intermediate'
font_size: 30
size_hint: 0.2,0.2
color: (0.9,0.8,0,1)
background_color: (0,0,0,0)
pos_hint: {"x": 0.41, "y": 0.1}
on_release:
root.difficult = "Intermediate"
app.root.current = 'urecFac'
Button:
text: 'Advanced'
font_size: 30
size_hint: 0.2,0.2
color: (0.9,0.8,0,1)
background_color: (0,0,0,0)
pos_hint: {"x": 0.66, "y": 0.1}
on_release:
root.difficult = "Advanced"
app.root.current = 'urecFac'
<Urec_facilities>:
BoxLayout:
orientation: "vertical"
Button:
text: "Adventure Center"
font_size: 50
color: (0.9,0.8,0,1)
background_normal: "adventureCenterImage.jpg"
on_release: app.root.current = "AdventureDirectory"
Button:
background_normal: "mainScreenImage.png"
text: "Back"
font_size: 50
color: (0.9,0.8,0,1)
on_release: app.root.current = "mainScreen"
<AdventureDirectory>:
BoxLayout:
orientation: "vertical"
Button:
text: "Bouldering"
font_size: 50
color: (0.9,0.8,0,1)
on_release:
app.root.current = "BoulderingDirectory"
Button:
text: "Go back"
font_size: 50
color: (0.9,0.8,0,1)
on_release:
app.root.current = "urecFac"
<BoulderingDirectory>:
BoxLayout:
orientation: "vertical"
Label:
text: root.rows
text_size: (root.width - 175), None
Button:
text: "Go back"
font_size: 50
color: (0.9,0.8,0,1)
background_color: (0,0,0,1)
on_release:
app.root.current = "AdventureDirectory"
""")
class ScreenManagerApp(App):
def build(self):
return root_widget
if __name__ == '__main__':
ScreenManagerApp().run()