【问题标题】:Kivy - Saving object's values changed in Popup, so that after closing it, when I open the popup again it opens with new valuesKivy - 保存对象的值在弹出窗口中更改,以便在关闭它后,当我再次打开弹出窗口时,它会以新值打开
【发布时间】:2020-02-18 11:56:00
【问题描述】:

我想在弹出窗口中更改某个类的一些按钮标签,并在重新打开弹出窗口后保留新标签。如果你运行我的应用程序,你会看到按下“Press me”按钮后,会出现一个带有标签“Default”的按钮的弹出窗口,按下它后,它会将标签更改为“New”。我希望能够关闭弹出窗口,按“按我”按钮,然后在弹出窗口中看到带有“新建”标签的按钮。

我的 .py 文件

from kivy.uix.floatlayout import FloatLayout
from kivy.core.window import Window
from kivy.uix.popup import Popup
from kivy.app import App
from kivy.uix.widget import Widget

import time

Window.clearcolor = (1, 1, 1, 1)
Window.size = (800, 480)

class MyGrid(Widget):
    def btn(self):
        show_popup(T, "Window")


class T(FloatLayout):
    pass

def show_popup(tab, name): 
    show = tab()
    popupWindow = Popup(title = name, content = show, size_hint = (None,None), size = (800,384), auto_dismiss = True)
    popupWindow.open()
    return popupWindow

class TimeApp(App):
    def build(self):
        return MyGrid()



if __name__ == "__main__":
    TimeApp().run()

我的 .kv 文件

<MyGrid>    
    Button:
        text: "Press me"
        on_press: root.btn()


<T>:
    Button:
        pos_hint: {"center_x": 0.5, "center_y": 0.5}
        text: "Default"
        on_press: self.text = "New"

【问题讨论】:

    标签: python python-3.x kivy kivy-language


    【解决方案1】:

    一种方法是保留对弹出窗口的引用。
    py方:

    Window.clearcolor = (1, 1, 1, 1)
    Window.size = (800, 480)
    
    
    class MyGrid(Widget):
    
        def __init__(self, **kwargs):
            super(MyGrid, self).__init__(**kwargs)
            self.popupWindow = Popup(content=T(), size_hint=(None, None),
                                     size=(800, 384), auto_dismiss=True)
    
        def btn(self):
            self.show_popup("Window")
    
        def show_popup(self, name):
            self.popupWindow.title = name
            self.popupWindow.open()
    
    
    class T(FloatLayout):
        pass
    
    
    class TimeApp(App):
        def build(self):
            return MyGrid()
    
    
    if __name__ == "__main__":
        TimeApp().run()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多