У меня проблема с динамическим обновлением текста моего ярлыка.
Я делаю физическое записывающее устройство, используя Raspberry pi, и моя цель - отслеживать состояние моего рекордера (Запись / Not Recording) путем обновления метки.
Программа работает следующим образом: Проверьте, нажата ли кнопка -> Запись -> Проверьте, нажата кнопка -> Остановить запись
Мне удается успешно обновить метку только при нет другие функции вызваны после self.ids.lab.text оператор:
Обновление успешно
if self.Buttpress() == 0:
self.ids.lab.text = "Pressed"
Не обновляется успешно
if self.Buttpress() == 0:
self.ids.lab.text = "Pressed"
self.assign_action()
Вот код разбивки:
#test_kivy.py
import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.clock import Clock
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ObjectProperty
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD) # Setting pin board pin mode
global pin
pin = 10 #Button pin
GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Sets raspi internal resistors to pull-up
class Test(Screen):
# Counter Keeping track of recording state
rec = 0
def __init__(self, **kwargs):
super(Test, self).__init__(**kwargs)
# Scheduling the start of the program, giving time to the GUI to initialise
Clock.schedule_once(self.mathere isin, 4)
# Assigning the state of my button
def Buttpress(self):
buttpress = GPIO.input(pin)
return buttpress
# Checking if button is pressed (1 = not pressed, 0 = pressed)
def button_state(self):
while self.Buttpress() == 1:
self.Buttpress()
if self.Buttpress() == 0:
# updating label when pressed
self.ids.lab.text = "Pressed"
self.assign_action()
def assign_action(self):
if self.rec == 0:
print("Recording")
# updating label to Recording...
self.ids.lab.text = "Recording..."
self.rec = self.rec+1
#Debounce time
time.sleep(1)
self.button_state()
if self.rec == 1:
print("Not rec")
# updating label to Recording...
self.ids.lab.text = "Recording Stop"
#Updating recording state
self.rec = self.rec-1
#Debounce time
time.sleep(1)
self.button_state()
def main(self,dt):
self.button_state()
class WindowManager(ScreenManager):code
pass
class TestGui(App):
def build(self):
self.load_kv('test_kivy.kv')
return Test()
if __name__ == "__main__":
TestGui().run()
И мой файл .kv:
#text_kivy.kv
<CustLabel@Label>:
font_size: 26
color: (0.3,0.5,0.9,1)
size_hint: (0.2, 0.1)
background_color: (0.3,0.5,0.6,1)
<Test>:
size: root.width, root.height
id: main_menu
FloatLayout:
CustLabel:
id : lab
text: "Not Pressed"
pos_hint: {"x":0.39,"top":1}
Я потратил 3 дня, пытаясь успешно обновить ярлык, используя идентификаторы , ObjectProperty , App.get_running_app () и другие.
Я относительно новый Kivy, поэтому надеюсь, что над ним не так много мусора.
Спасибо за любую помощь!