Python Kivy:如何在不关闭弹出窗口的情况下更新弹出窗口标签文本

Python Kivy:如何在不关闭弹出窗口的情况下更新弹出窗口标签文本,python,python-3.x,popup,kivy,sleep,Python,Python 3.x,Popup,Kivy,Sleep,我想打开一个弹出窗口,3秒钟后更改弹出窗口标签的文本 我尝试以下代码: from kivy.app import App from kivy.uix.popup import Popup from kivy.lang import Builder from kivy.uix.button import Button import time Builder.load_string(''' <SimpleButton>: on_press: self.fire_popup()

我想打开一个弹出窗口,3秒钟后更改弹出窗口标签的文本

我尝试以下代码:

from kivy.app import App
from kivy.uix.popup import Popup
from kivy.lang import Builder
from kivy.uix.button import Button
import time

Builder.load_string('''
<SimpleButton>:
    on_press: self.fire_popup()
<SimplePopup>:
    id:pop
    size_hint: .4, .4
    auto_dismiss: True
    title: 'Hello world!!'
    Label:
        id: lbl_id
        text: 'Default Text'
''')


class SimplePopup(Popup):
    pass


class SimpleButton(Button):
    text = "Fire Popup !"

    def fire_popup(self):
        pop = SimplePopup()
        pop.open()

        time.sleep(3)
        pop.ids.lbl_id.text = "Changed Text"


class SampleApp(App):
    def build(self):
        return SimpleButton()


SampleApp().run()
从kivy.app导入应用
从kivy.uix.popup导入弹出窗口
从kivy.lang导入生成器
从kivy.uix.button导入按钮
导入时间
Builder.load_字符串(“”)
:
按:self.fire\u popup()
:
id:流行音乐
大小提示:.4,.4
自动排除:正确
标题:“你好,世界!!”
标签:
id:lbl\U id
文本:“默认文本”
''')
类SimplePopup(弹出窗口):
通过
类SimpleButton(按钮):
text=“火灾弹出窗口!”
def fire_弹出窗口(自):
pop=SimplePopup()
pop.open()
时间。睡眠(3)
pop.ids.lbl\u id.text=“已更改文本”
类样本应用程序(应用程序):
def生成(自):
返回SimpleButton()
SampleApp().run()
但是在打开弹出窗口之前,它会休眠3秒钟,更改标签文本,然后弹出窗口将打开

有什么问题吗?

您的代码:

time.sleep(3)
正在停止主线程,因此在该代码完成之前,GUI不会发生任何事情。您应该使用
Clock.schedule\u once()
这样安排文本更改:

from kivy.app import App
from kivy.clock import Clock
from kivy.uix.popup import Popup
from kivy.lang import Builder
from kivy.uix.button import Button

Builder.load_string('''
<SimpleButton>:
    on_press: self.fire_popup()
<SimplePopup>:
    id:pop
    size_hint: .4, .4
    auto_dismiss: True
    title: 'Hello world!!'
    Label:
        id: lbl_id
        text: 'Default Text'
''')


class SimplePopup(Popup):
    pass


class SimpleButton(Button):
    text = "Fire Popup !"

    def fire_popup(self):
        self.pop = SimplePopup()
        self.pop.open()
        Clock.schedule_once(self.change_text, 3)

    def change_text(self, dt):
        self.pop.ids.lbl_id.text = "Changed Text"


class SampleApp(App):
    def build(self):
        return SimpleButton()


SampleApp().run()
从kivy.app导入应用
从kivy.clock导入时钟
从kivy.uix.popup导入弹出窗口
从kivy.lang导入生成器
从kivy.uix.button导入按钮
Builder.load_字符串(“”)
:
按:self.fire\u popup()
:
id:流行音乐
大小提示:.4,.4
自动排除:正确
标题:“你好,世界!!”
标签:
id:lbl\U id
文本:“默认文本”
''')
类SimplePopup(弹出窗口):
通过
类SimpleButton(按钮):
text=“火灾弹出窗口!”
def fire_弹出窗口(自):
self.pop=SimplePopup()
self.pop.open()
时钟。计划一次(self.change\u文本,3)
def更改_文本(自身,dt):
self.pop.ids.lbl\u id.text=“已更改文本”
类样本应用程序(应用程序):
def生成(自):
返回SimpleButton()
SampleApp().run()