Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kivy-显示Python变量并在变量更改时自动更新的标签_Python_Python 3.x_Kivy_Python 3.7_Kivy Language - Fatal编程技术网

Kivy-显示Python变量并在变量更改时自动更新的标签

Kivy-显示Python变量并在变量更改时自动更新的标签,python,python-3.x,kivy,python-3.7,kivy-language,Python,Python 3.x,Kivy,Python 3.7,Kivy Language,我一直在试图找到这个问题的答案,但毫无结果 我有一个需要显示全局Python变量的Label对象。但是,它们最初只显示在Kivy文件中设置的文本,除非按下按钮,否则不会更改。我需要标签立即显示变量,以及在变量更改时自动更新 下面是一个例子: """Hopefully this is a better example of what I need.""" # ============================== Import Modules ========================

我一直在试图找到这个问题的答案,但毫无结果

我有一个需要显示全局Python变量的Label对象。但是,它们最初只显示在Kivy文件中设置的文本,除非按下按钮,否则不会更改。我需要标签立即显示变量,以及在变量更改时自动更新

下面是一个例子:

"""Hopefully this is a better example of what I need."""
# ============================== Import Modules ==============================

# ===== Import Kivy =====
from kivy.app import App
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.properties import StringProperty

# ============================================================================


# =========================== Variable Definitions ===========================

# ===== Define ScreenManager =====
sm = ScreenManager()

# ============================================================================


# ========================== Define screen classes ===========================

class InputScreen(Screen):
    """Input stuff into text boxes."""

    var1 = StringProperty()
    var2 = StringProperty()
    var3 = StringProperty()
    # Take the input from these text boxes and show them on the next screen


class DisplayScreen(Screen):
    """Show content from previous text boxes."""

# ============================================================================


# ============================= Define main app ==============================

class MainApp(App):
    """Class for main app."""

    def build(self):
        """Build app."""
        # Add screens to ScreenManager
        sm.add_widget(InputScreen(name='input'))
        sm.add_widget(DisplayScreen(name='display'))

        # Display current screen
        return sm

# ============================================================================


# ===== Run program =====
if __name__ == '__main__':
    MainApp().run()

解决这个问题的一种方法是使用Kivy属性

将变量作为StringProperties添加到应用程序中。 设置每次更改输入文本时要更新的变量。。 设置显示标签以显示变量。。。 您的代码,正在工作: .py:

从kivy.app导入应用程序 从kivy.uix.screenmanager导入屏幕,screenmanager 从kivy.properties导入StringProperty sm=屏幕管理器 类输入屏幕: 在文本框中输入内容。 类显示屏幕: 显示以前文本框中的内容。 类别mainappp: 主应用程序的类。 var1=StringProperty var2=StringProperty var3=StringProperty def buildself: 构建应用程序。 向ScreenManager添加屏幕 sm.add_widgetInputScreenname='input' sm.add_widgetDisplayScreenname='display' 显示当前屏幕 返回sm ====运行程序===== 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': MainApp.run …和.kv:

: 标签: 字体大小:20 位置提示:{'center_x':0.5,'center_y':0.85} 文本:var1= 文本输入: id:var1_输入 字体大小:24 大小提示:无,无 尺码:96,48 位置提示:{'center_x':0.5,'center_y':0.77} 多行:False 当文本更改时,将其写入变量 on_text:app.var1=self.text 标签: 字体大小:20 位置提示:{'center_x':0.5,'center_y':0.65} 文本:var2= 文本输入: id:var2_输入 字体大小:24 大小提示:无,无 尺码:96,48 位置提示:{'center_x':0.5,'center_y':0.57} 多行:False 当文本更改时,将其写入变量 on_text:app.var2=self.text 标签: 字体大小:20 位置提示:{'center_x':0.5,'center_y':0.45} 文本:var3= 文本输入: id:var3_输入 字体大小:24 大小提示:无,无 尺码:96,48 位置提示:{'center_x':0.5,'center_y':0.37} 多行:False 当文本更改时,将其写入变量 on_text:app.var3=self.text 按钮: 字体大小:20 大小提示:无,无 尺码:120、50 位置提示:{'center_x':0.5,'center_y':0.15} 正文:继续 新闻界: root.manager.transition.direction='left' root.manager.current='display' : 按钮: 字体大小:20 大小提示:无,无 尺码:80,50 位置提示:{x':0,'top':1} 文本:返回 新闻界: root.manager.transition.direction='right' root.manager.current='input' 标签: id:label1 文本到显示:这应该显示上一屏幕中的var1 字体大小:20 位置提示:{'center_x':0.5,'center_y':0.7} text:var1=+app.var1获取更新的值 标签: id:label2 文本到显示:这应该显示上一屏幕中的var2 字体大小:20 位置提示:{'center_x':0.5,'center_y':0.5} text:var2=+app.var2获取更新的值 标签: id:label3 文本到显示:这应该显示上一屏幕中的var3 字体大小:20 位置提示:{'center_x':0.5,'center_y':0.3} text:var3=+app.var3获取更新的值
我需要它立即显示变量,无需输入。这必须从变量中加载值,因为在我的实际应用程序中,无法提前知道值是什么。也许我解释得不好。。。我将制作一个更好的示例并编辑此评论,以添加指向Github要点的链接。留意。无法编辑我的上一条评论,所以。。。我可以回答你的问题,但你也必须更新你的代码。编辑您的问题并用要点中的代码替换您的代码。。否则,阅读它的人会感到困惑…:o@Offbox您可以将running app保存在如下变量中:self.app=app.get\u running\u app。之后,您可以通过self.app.my_var=任意更改变量
#:kivy 1.11.1

<InputScreen>:
    var1: var1_input.text
    var2: var2_input.text
    var3: var3_input.text
    Label:
        font_size: 20
        pos_hint: {'center_x': 0.5, 'center_y': 0.85}
        text: "var1 ="
    TextInput:
        id: var1_input
        font_size: 24
        size_hint: None, None
        size: 96, 48
        pos_hint: {'center_x': 0.5, 'center_y': 0.77}
        multiline: False
    Label:
        font_size: 20
        pos_hint: {'center_x': 0.5, 'center_y': 0.65}
        text: "var2 ="
    TextInput:
        id: var2_input
        font_size: 24
        size_hint: None, None
        size: 96, 48
        pos_hint: {'center_x': 0.5, 'center_y': 0.57}
        multiline: False
    Label:
        font_size: 20
        pos_hint: {'center_x': 0.5, 'center_y': 0.45}
        text: "var3 ="
    TextInput:
        id: var3_input
        font_size: 24
        size_hint: None, None
        size: 96, 48
        pos_hint: {'center_x': 0.5, 'center_y': 0.37}
        multiline: False
    Button:
        font_size: 20
        size_hint: None, None
        size: 120, 50
        pos_hint: {'center_x': 0.5, 'center_y': 0.15}
        text: "Continue"
        on_press:
            root.manager.transition.direction = 'left'
            root.manager.current = 'display'

<DisplayScreen>:
    Button:
        font_size: 20
        size_hint: None, None
        size: 80, 50
        pos_hint: {'x': 0, 'top': 1}
        text: "Back"
        on_press:
            root.manager.transition.direction = 'right'
            root.manager.current = 'input'
    Label:
        id: label1
        text_to_display:"(this should show var1 from previous screen)"
        font_size: 20
        pos_hint: {'center_x': 0.5, 'center_y': 0.7}
        text: "var1 = " + self.text_to_display
    Label:
        id: label2
        text_to_display:"(this should show var2 from previous screen)"
        font_size: 20
        pos_hint: {'center_x': 0.5, 'center_y': 0.5}
        text: "var2 = " + self.text_to_display
    Label:
        id: label3
        text_to_display:"(this should show var3 from previous screen)"
        font_size: 20
        pos_hint: {'center_x': 0.5, 'center_y': 0.3}
        text: "var3 = " + self.text_to_display