コンポーネントをモジュール化しておく必要があるプロジェクトで作業する。変数(alarm
)が必要な別のファイルにKivyのラベル(StatusLabel
)があり、それをコンストラクタに渡すことをお勧めします。def __init__(self, alarm, **kwargs):
残りのキャンバスを構築する際に、その方法を理解できません。initでkivyラベルに変数を渡す
ヤルバスのself.alarm
をgui.pyファイルのStatusLabel
に渡すにはどうすればよいですか?
ここでは、現在の機能していない状態での回避策を示します。 gui.py
では、属性にアクセスするために二重インポート(jarvus.py
インポートgui
)を試しています。これは私が意図した解決策ではありません。
メインファイル:jarvus.py
import comms
import alarm
import gui
from kivy.app import App, Builder
class Jarvus(App):
comms_system = comms.Comms()
alarm = alarm.Alarm(comms_system)
def build(self):
# comms thread
self.comms_system.setDaemon(True)
self.comms_system.start()
self.comms_system.log("comms started")
# alarm thread
self.alarm.setDaemon(True)
self.alarm.start()
self.comms_system.log("alarm started")
# this WOULD work if I only wanted the single widget
# return gui.StatusLabel(self.alarm)
# How can I get self.alarm into this Builder?
return Builder.load_string(gui.KV)
Jarvus().run()
そして、GUI要素、gui.py
KV = '''
<ScreenManagement>:
HomeScreen:
BoxLayout:
<HomeScreen>:
BoxLayout:
<StatusLabel>:
'''
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.image import Image
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.config import Config
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager, Screen, SlideTransition
from kivy.lang import Builder
from kivy.clock import Clock
class ScreenManagement(ScreenManager):
def __init__(self, **kwargs):
self.transition = SlideTransition()
# HERE'S THE PROBLEM
class StatusLabel(Label):
def __init__(self, alarm, **kwargs):
# kivy stuff
super(StatusLabel, self).__init__(**kwargs)
# make the button update
self.font_size = 24
Clock.schedule_interval(self.update, .1)
# self.alarm = alarm
self.id = 'status'
def update(self, *args):
try:
from jarvus import Jarvus
self.text = Jarvus.alarm.now()
except Exception:
return
class HomeScreen(Screen):
def __init__(self, **kwargs):
self.name = 'home'
self.orientation = 'vertical'
self.add_widget(StatusLabel())
質問は何ですか? – Juggernaut
Jarvusの 'self.alarm'を_gui.py_ファイルの' StatusLabel'にどのように渡すことができますか? – dadiletta