Python 3.x 名称错误:名称';fro';未定义

Python 3.x 名称错误:名称';fro';未定义,python-3.x,kivy,kivy-language,Python 3.x,Kivy,Kivy Language,我的代码如下所示。在函数populate中,我有变量fro、to和transport。我试图将这些变量调用到get函数中,然后在显示弹出窗口时调用它们。这些变量随后将显示在弹出窗口中。但是,我有一个名称错误:名称“fro”没有用我的代码定义。当我使用num=Connected.get()而不是num=g并注释掉c=Connected()和g=c.get()时,我得到了消息框弹出窗口中显示的。我不知道我做错了什么。有更好的方法吗 class Connected(Screen):

我的代码如下所示。在函数populate中,我有变量fro、to和transport。我试图将这些变量调用到get函数中,然后在显示弹出窗口时调用它们。这些变量随后将显示在弹出窗口中。但是,我有一个名称错误:名称“fro”没有用我的代码定义。当我使用
num=Connected.get()
而不是
num=g
并注释掉
c=Connected()
g=c.get()
时,我得到了消息框弹出窗口中显示的
。我不知道我做错了什么。有更好的方法吗

    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()
千伏

<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()
:
标题:root.route
大小提示:无,无
尺码:400400
分隔符颜色:1,0,0,1
盒子布局:
方向:“垂直”
标签:
id:info
#文字:“很好”
文本:str(root.num)
按钮:
大小提示:1,0.2
文字:“OK”
新闻界:
根目录

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

例子 main.py 试验电压(千伏)
#:kivy 1.10.0
:
:
标题:root.route
大小提示:无,无
尺码:400400
分隔符颜色:1,0,0,1
盒子布局:
方向:“垂直”
标签:
id:info
#文字:“很好”
文本:str(root.num)
按钮:
大小提示:1,0.2
文字:“OK”
新闻界:
根目录
输出

def get(self)
中,未定义变量
fro
,因此它会失败。也许你忘了在这个方法中添加
global-fro
?我也试过了。它仍然给我一个错误。但是,如果我不调用get()函数并在get函数中使用print(fro),它就可以正常工作。正如我所说的,如果您从未定义过
fro
,那么它就不会工作。我假设您已经在Python脚本的顶部定义了变量“fro”、“to”和“transport”,即在所有导入语句之后。
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()
#: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()