【问题标题】:NameError: name 'fro' not definedNameError:名称“for”未定义
【发布时间】:2017-10-16 13:34:34
【问题描述】:

我有如下所示的代码。在函数填充中,我有来回、去往和运输的变量。我试图将这些变量调用到 get 函数中,然后在显示 Popup 时调用它们。然后这些变量将显示在弹出窗口中。但是,我有一个 NameError: name 'fro' is not defined with my code。当我使用num = Connected.get() 而不是num = g 并注释掉c =Connected()g= c.get() 我得到bound method MessageBox.get of <connected.MessageBox object at 0x000000000B36F3F0>> 显示在MessageBox 弹出窗口中。我不知道我做错了什么。有更好的方法吗?

    class Connected(Screen):

    def populate(self, transText, beginText, toText):
        global fro
        global to
        global transport

        self.rv.data = []
        self.ids.results.text=""
        self.ids.no_entry.text=""

        fro = beginText
        to = toText
        transport = transText        


    def get(self):
        b = fro
        a = StringProperty(b)
        return a

class MessageBox(Popup):
    c = Connected()
    g = c.get()

    route = 'MessageBox'

    num = g
    #num = Connected.get() 

    def popup_dismiss(self):
        self.dismiss()

Kivy.kv

<MessageBox>:
    title: root.route
    size_hint: None, None
    size: 400, 400
    separator_color: 1,0,0,1

    BoxLayout:
        orientation: 'vertical'
        Label:
            id: info
            #text: 'nice'
            text: str(root.num)
        Button:
            size_hint: 1, 0.2
            text: 'OK'
            on_press:
                root.dismiss()

【问题讨论】:

  • def get(self) 中,变量fro 没有定义,所以它失败了。也许您忘记在该方法中添加global fro
  • 我也试过了。它仍然给我一个错误。但是,如果我不在 get 函数中调用 get() 函数和 print(fro),它就可以正常工作。
  • 正如我所说,如果您从未定义过fro,它将无法正常工作。
  • 我认为您已经在 Python 脚本的顶部(即所有导入语句之后)定义了变量“fro”、“to”和“transport”。

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


【解决方案1】:

全局变量必须在 import after statements 之后定义。导入因为我没有你的完整代码。下面的例子只是一个例子。

示例

main.py

​​>
from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.uix.popup import Popup
from kivy.properties import StringProperty


fro = "fro-1-2-3"
to = "to-1-2-3"
transport = "transport-1-2-3"


class Connected(Screen):

    def __init__(self, **kwargs):
        super(Connected, self).__init__(**kwargs)
        self.populate("transText", "beginText", "toText")

    def populate(self, transText, beginText, toText):
        global fro
        global to
        global transport

        # self.rv.data = []
        # self.ids.results.text = ""
        # self.ids.no_entry.text = ""

        fro = beginText
        to = toText
        transport = transText

    def get(self):
        print("Connected.get: from={}".format(fro))
        b = fro
        a = StringProperty(b)
        return a


class MessageBox(Popup):
    c = Connected()
    g = c.get()
    print("MessageBox: g={}".format(g))

    route = 'MessageBox'

    num = g
    #num = Connected.get()

    def popup_dismiss(self):
        self.dismiss()


class TestApp(App):
    def build(self):
        return MessageBox()


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

test.kv

#:kivy 1.10.0

<Connected>:

<MessageBox>:
    title: root.route
    size_hint: None, None
    size: 400, 400
    separator_color: 1,0,0,1

    BoxLayout:
        orientation: 'vertical'
        Label:
            id: info
            #text: 'nice'
            text: str(root.num)
        Button:
            size_hint: 1, 0.2
            text: 'OK'
            on_press:
                root.dismiss()

输出

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 2016-08-01
    • 2021-04-15
    • 2019-01-26
    • 2021-10-05
    • 2017-08-16
    相关资源
    最近更新 更多