python-kivy:在标签小部件中显示并动态更新当前时间
我目前正在用python和kivy开发GUI。我的目标是在屏幕上有一个标签/小部件,它可以显示当前时间并自动更新。稍后,我想使用该值(时间)来填充其他输入小部件(“使用当前时间”) 这是屏幕的.kv文件,我想在上面显示时间。 现在,我添加了一个按钮,它将触发my main.py中的函数change\u time,然后使用标签id“current\u time”更新文本/标签。最后,这应该会自动发生,而无需使用按钮 如果运行此命令,则会出现错误“UnboundLocalError:赋值前引用的局部变量'time'”。当我在类ClockScreen中定义可变时间时,它会工作,但时间是静态的,只会更新一次(当我运行应用程序时)python-kivy:在标签小部件中显示并动态更新当前时间,python,label,kivy,clock,kivy-language,Python,Label,Kivy,Clock,Kivy Language,我目前正在用python和kivy开发GUI。我的目标是在屏幕上有一个标签/小部件,它可以显示当前时间并自动更新。稍后,我想使用该值(时间)来填充其他输入小部件(“使用当前时间”) 这是屏幕的.kv文件,我想在上面显示时间。 现在,我添加了一个按钮,它将触发my main.py中的函数change\u time,然后使用标签id“current\u time”更新文本/标签。最后,这应该会自动发生,而无需使用按钮 如果运行此命令,则会出现错误“UnboundLocalError:赋值前引用的局部
如何能够自动更新当前时间,然后在我的时钟屏幕上显示,而不使用按钮调用函数?谢谢 在发布回溯时,请发布完整内容,它几乎肯定包含有价值的调试信息,说明哪些行导致了问题。不要创建与导入模块同名的局部变量(如
time
)。当python在change\u time()
方法中看到time=
时,它会创建一个名为time
的局部变量。然后,当它试图执行time.asctime()
时,它正在寻找新创建的time
变量的属性。只需为变量使用不同的名称即可。非常感谢@JohnAnderson-更改变量名称确实解决了问题!
<ClockScreen>:
FloatLayout:
#Background color
canvas:
Color:
rgb: utils.get_color_from_hex("#00a7d8")
Rectangle:
size: self.size
pos: self.pos
#Input-Fields and Labels
GridLayout:
cols: 1
pos_hint: {"top": 1, "right": 1}
size_hint: 1, .8
Label:
id: current_time
text: "Current Time"
Button:
on_press:
root.change_time()
[...]
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
from kivy.uix.button import ButtonBehavior
from kivy.uix.image import Image
from kivy.uix.label import Label
from kivy.clock import Clock
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.spinner import Spinner
from kivy.properties import ObjectProperty
import requests
import time
[...]
class ClockScreen(Screen):
def change_time(self):
time = time.asctime()
current_time = self.ids.current_time
current_time.text = time
print(current_time.text)
[...]
GUI = Builder.load_file("main.kv")
class MainApp(App):
def build(self):
return GUI
def change_screen(self, screen_name):
screen_manager = self.root.ids['screen_manager']
screen_manager.transition = NoTransition()
screen_manager.current = screen_name
MainApp().run() #Um die Mainapp zu starten