如何从列表框中获取字符串

时间:2014-05-03 18:11:07

标签: string listbox wxpython

我有非常复杂的问题。我搜索整个互联网并尝试了一切,但没有任何效果。我希望从列表框中获取字符串,然后使用列表框中的单词删除文件中的行。可以请有人帮助我吗?这是代码:

def OnDelete(自我,事件):
        sel = self.listbox.GetSelection()
        如果sel!= -1:
            self.listbox.Delete(SEL)
            subor = open(“Save / savegame.txt”,“r”)
            lines = subor.readlines()
            subor.close()
            subor = open(“Save / savegame.txt”,“w”)
            selstring = self.listbox.GetString(self.listbox.GetSelection())
            换行:
                如果行!= selstring:
                    subor.write(线)
            subor.close()

这是保存文件的代码:
    def OnNewGame(自我,事件):
        nameofplr = wx.GetTextFromUser('输入你的名字:','新游戏')
        小霸王=打开( “保存/ savegame.txt”, “一个”)
        subor.write(“\ n”+ nameofplr)
        subor.close()
        savegame = open(“Save /”+ nameofplr +“。prjct”,“w +”)
        savegame.close()

显示此错误:

追踪(最近一次通话):   OnDelete中的文件“D:\ Python \ Python Projects \ Project \ Project.py”,第106行     selstring = self.listbox.GetString(self.listbox.GetSelection())   GetString中的文件“D:\ Python \ lib \ site-packages \ wx-3.0-msw \ wx_core.py”,第12962行     return core .ItemContainer_GetString(* args,** kwargs) wx._core.PyAssertionError:C ++断言“IsValid(n)”在wxListBox :: GetString()中的.... \ src \ msw \ listbox.cpp(387)失败:wxListBox :: GetString中的索引无效

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

考虑一下你的程序是如何工作的: 在OnDelete方法中,您检查选择了哪个项目,然后删除此项目。然后你对你的文件做一些事情。之后,您尝试从所选项目中获取字符串,但这已被您删除。

您应该在

行后调用Delete
selstring = self.listbox.GetString(self.listbox.GetSelection())

如果您将代码放在代码块中也很好,这样我们就可以看到缩进。

答案 1 :(得分:0)

比你多!我修好了!如果有人会遇到同样的问题,你必须更改OnDelete代码(第一个有问题的代码):

def OnDelete(自我,事件):
        sel = self.listbox.GetSelection()
        f = open(“Save / savegame.txt”,“r”)         read = f.readlines()         f.close()         name = self.listbox.GetStringSelection()         newfile =“”“”“”         因为我读:             如果在i中的名字:                 通过             其他:                 newfile + = i         n =打开(“Save / savegame.txt”,“w”)         one = str(newfile)         n.write(之一)         n.close         self.listbox.Delete(SEL)