当然亟待解决的问题是: GUI 界面会时不时地死掉,应该是多线程的问题?
在下面两个函数里加了些debug信息,得到的结果,各位分析下,是什么原因?
def dolistLocalFile(self,widget,opt):
print "while start thread"
thread.start_new_thread(self.listLocalFile,(gmbox.musicdir,))
print "OK"
def listLocalFile(self,path):
print "in new thread"
self.local_list_button.set_sensitive(False)
self._songlist = gmbox.FileList(path)
print self._songlist
#self._songlist = gmbox.Lists("华语热歌")
self.currentlist = self._songlist
print "debug info 1"
self.list_model.clear()
print "debug info 2"
for song in self._songlist.songlist:
print "adding",song['title'],
self.list_model.append(
[str(self._songlist.songlist.index(song)+1),song['title'],song['artist']])
print "done!"
print "debug info"
self.local_list_button.set_sensitive(True)
print "exit thread"
点获取本地列表,输出:
while start thread
in new thread
OK
ignoring 耍大牌-蔡依林.mp3.downloading
Title="我不后悔" Artist="顾峰" ID="0"
Title="同一个遗憾" Artist="潘玮柏、纪佳松" ID="1"
Title="让让" Artist="蔡依林" ID="2"
Title="Don't Go Away (抢听版)" Artist="BY2" ID="3"
Title="说好不后悔" Artist="金海心" ID="4"
Title="花蝴蝶" Artist="蔡依林" ID="5"
Title="犯错" Artist="斯琴高丽、顾峰" ID="6"
Title="关不上的窗" Artist="周传雄" ID="7"
Title="大丈夫" Artist="蔡依林" ID="8"
debug info 1
debug info 2
adding 我不后悔 done!
杀死
有时候会好一点:
while start thread
in new thread
OKignoring 耍大牌-蔡依林.mp3.downloading
Title="我不后悔" Artist="顾峰" ID="0"
Title="同一个遗憾" Artist="潘玮柏、纪佳松" ID="1"
Title="让让" Artist="蔡依林" ID="2"
Title="Don't Go Away (抢听版)" Artist="BY2" ID="3"
Title="说好不后悔" Artist="金海心" ID="4"
Title="花蝴蝶" Artist="蔡依林" ID="5"
Title="犯错" Artist="斯琴高丽、顾峰" ID="6"
Title="关不上的窗" Artist="周传雄" ID="7"
Title="大丈夫" Artist="蔡依林" ID="8"
debug info 1
debug info 2
adding 我不后悔 done!
MainWindow.py:227: Warning: IA__g_object_set_property: object class `GtkCellRendererToggle' has no property named `text'
[str(self._songlist.songlist.index(song)+1),song['title'],song['artist']])
adding 同一个遗憾 done!
adding 让让 done!
adding Don't Go Away (抢听版) done!
adding 说好不后悔 done!
adding 花蝴蝶 done!
adding 犯错 done!
adding 关不上的窗 done!
杀死
很诡异,也有时候能adding完所有歌曲,显示出列表的...