wxPython中my函数的定义

wxPython中my函数的定义,wxpython,Wxpython,我正在尝试使用wxPython创建一个小工具。基本上,我希望我的代码从csv文件导入数据,并打印个人的姓名和职业。无论如何,在搜索ppl定义中使用find_names函数时,我遇到了一个错误。错误为NameError:未定义全局名称“find_names”。我不知道如何修理它。如果我将find_names函数设置为全局,那么代码也不会工作。我已经在python中为此编写了一个工作代码,将结果写入终端窗口。但是wxPython对我来说还是新的,我还不太明白…谢谢你的帮助 #!/usr/bin/en

我正在尝试使用wxPython创建一个小工具。基本上,我希望我的代码从csv文件导入数据,并打印个人的姓名和职业。无论如何,在搜索ppl定义中使用find_names函数时,我遇到了一个错误。错误为NameError:未定义全局名称“find_names”。我不知道如何修理它。如果我将find_names函数设置为全局,那么代码也不会工作。我已经在python中为此编写了一个工作代码,将结果写入终端窗口。但是wxPython对我来说还是新的,我还不太明白…谢谢你的帮助

#!/usr/bin/env python
import wx
import wx.lib.mixins.listctrl as listmix
import csv
from wxPython.wx import *

info = csv.reader(open('data.csv', 'rb'),delimiter=',')

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, 
            "Search", pos=(920,730), size=(350,250) )

        panel = wx.Panel(self, wx.ID_ANY)

        self.control = wxTextCtrl(panel, 1, style=wxTE_PROCESS_ENTER 
                        , pos=(130,180), size=(200,28))

        self.list_ctrl = wx.ListCtrl(panel
                        , style=wx.LC_REPORT|wx.BORDER_SUNKEN
                        , size=(350,170))

        self.list_ctrl.InsertColumn(0, "Name", width = 120)
        self.list_ctrl.InsertColumn(1, "Occupation", width = 220)

        index = 0
        for row in info:
            self.list_ctrl.InsertStringItem(index, row[1])
            self.list_ctrl.SetStringItem(index, 1, row[4])

            if index % 2:
                self.list_ctrl.SetItemBackgroundColour(index, "white")
            else:
                self.list_ctrl.SetItemBackgroundColour(index, "yellow")
            index += 1

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.list_ctrl, 0, wx.ALL|wx.CENTER, 5)
        panel.SetSizer(sizer)


        btn = wx.Button(panel, label="Search", pos=(20,180))
        btn.Bind(wx.EVT_BUTTON, self.search_ppl)

        key_index = 4
        results = []

    def search_ppl(self, event):
                employee_name = self.control.GetValue()
        find_names(key_index, results, info, employee_name)
        print results

    def find_names(key_index, results, info, employee_name):
        for row in info: #search each row in data.csv               
                    if employee_name in row[key_index]: #name is in file                    results.append(row[1]) #add element to the list
        return results, info




if __name__ == '__main__':
    app = wx.App(False)
    frame = MyFrame()
    frame.Show()
    app.MainLoop()
换线

find_names(key_index, results, info, employee_name)

因为您正在调用一个类方法,所以需要使用self。在方法名之前


在调用find_name之前,您还需要设置key_index、results和info的值

谢谢Yoriz,这取得了一些进展。然而,我仍然得到一个错误。你的最后一句话是什么意思?我是否需要使关键索引、结果和信息全球化?我的信息已经是全球性的。当我将key_索引和结果设置为全局时,我得到一个错误“UnboundLocalError:赋值前引用的局部变量'results'。我不明白。如果我将一个变量声明为全局变量,那么代码不应该看到这些值吗?或者我是否需要以某种方式将它们传递给MyFrame类?
results, info = self.find_names(key_index, results, info, employee_name)