나는 Python에 대해 반 괜찮지 만 Kivy에 익숙하지 않습니다. 제 문제가 레이블 ID를 참조하고 있다는 것을 알고 있지만 문제를 해결할 수 없으며 검색이 필요한 것을 제공하지 않는 것 같습니다.
나는 현재 시간을 표시하기 위해 레이블을 얻으려고 노력하고 있으므로 업데이트 등의 측면에서 올바른 프레임 워크가 있다는 것을 알고 있지만 레이블 ID를 어떻게 든 참조하고 어려움을 겪고 있다고 확신합니까?
다음 코드는 정상적으로 실행 label_text.text
되고 오류가 발생하는 지점 을 업데이트하려고 할 때까지 레이블 등을 표시합니다 AttributeError: 'float' object has no attribute 'lbl_time'
. 시도 str(time.strftime("%H:%M:%S"))
했지만 해결되지 않았습니다.
from kivy.app import App
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.properties import ListProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.uix.screenmanager import ScreenManager, Screen, WipeTransition, FadeTransition
from kivy.uix.anchorlayout import AnchorLayout
from kivy.properties import ObjectProperty, StringProperty
from kivy.clock import Clock
import time
from datetime import datetime
class MainScreen(Screen):
def update_time(self):
lbl_time = ObjectProperty()
MyTime = time.strftime("%H:%M:%S")
self.lbl_time.text = MyTime
class DetailScreen(Screen):
pass
class SettingsScreen(Screen):
pass
class MyScreenManager(ScreenManager):
pass
root_widget = Builder.load_string('''
MyScreenManager:
MainScreen:
DetailScreen:
SettingsScreen:
<MainScreen>:
name: 'main'
BoxLayout:
orientation: 'vertical'
Label:
id: lbl_time
text: 'Time'
font_size: 60
Label:
text: 'Main2'
font_size: 30
GridLayout:
cols: 2
Label:
text: 'Bottom'
font_size: 30
Label:
text: 'Bottom1'
font_size: 30
<DetailScreen>:
name: 'details'
<SettingsScreen>:
name: 'settings'
''')
class ScreenManagerApp(App):
def build(self):
return root_widget
def on_start(self):
Clock.schedule_interval(MainScreen.update_time, 1)
ScreenManagerApp().run()
이것은 Kivy가 아닌 Python 문제에 가깝습니다. 의 객체 / 인스턴스가 아닌 update_time
클래스 MainScreen
클래스 의을 호출 했습니다 MainScreen
. 기본적으로 build
메서드 에 객체 (self.main_screen)에 대한 참조를 저장 한 다음 on_start에서 사용해야합니다.
class ScreenManagerApp(App):
def build(self):
self.main_screen = MainScreen()
return self.main_screen
def on_start(self):
Clock.schedule_interval(self.main_screen.update_time, 1)
또한 kv 언어, 즉 파이썬에서 ID에 액세스 할 수 없습니다. 속성을 추가하여 ID를 참조해야합니다. 예 the_time
:
<MainScreen>:
name: 'main'
the_time: _id_lbl_time
BoxLayout:
orientation: 'vertical'
Label:
id: _id_lbl_time
사소한 문제는 update_time()
매개 변수를 수신한다는 것입니다. 또한 코드에 이상한 점이 많이있어서 코드를 실행할 수 없었습니다. 아래 코드에서 위의 모든 사항을 수정했습니다.
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen
from kivy.properties import ObjectProperty, StringProperty
from kivy.clock import Clock
import time
from datetime import datetime
Builder.load_string('''
<MainScreen>:
name: 'main'
the_time: _id_lbl_time
BoxLayout:
orientation: 'vertical'
Label:
id: _id_lbl_time
text: 'Time'
font_size: 60
''')
class MainScreen(Screen):
def update_time(self, sec):
MyTime = time.strftime("%H:%M:%S")
self.the_time.text = MyTime
class ScreenManagerApp(App):
def build(self):
self.main_screen = MainScreen()
return self.main_screen
def on_start(self):
Clock.schedule_interval(self.main_screen.update_time, 1)
ScreenManagerApp().run()
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다