hucuibai 发表于 2014-08-19 17:38

wxpython列表

本帖最后由 hucuibai 于 2014-08-19 17:39 编辑

{'sername': u'测试1服', u'old': 28.0, u'name': u'hucuibai'}
{'sername': u'测试1服', u'old': 22.0, u'name': u'\u80e1\u7fe0\u67cf'}
{'sername': u'测试1服', u'name': u'xiaobai'}
{'sername': u'测试1服', u'old': 99.0, u'name': u'xiaobaicat', u'sex': 1.0}
{'sername': u'测试1服', u'old': 28.0, u'name': u'hucuibai'}
{'sername': u'测试2服', u'old': 22.0, u'name': u'\u80e1\u7fe0\u67cf'}
{'sername': u'测试2服', u'name': u'xiaobai'}
{'sername': u'测试2服', u'old': 99.0, u'name': u'xiaobaicat', u'sex': 1.0}

我现在想做一个批量mongodb查询的工具,查询到的数据内容如上,怎么把这个内容显示到一个列表里面呢,这个列的数目不确定是多少列(这个又点麻烦),新手求教,还望高手指教指教,这个资料实在是不好找,我想用listtrl做但是做了一天都没做出来,还有个问题就是我想要批量查询,怎么才能在一个列表里面往列表后面追加呢,还有怎么能吧列表里面的内容导出,问题有点多,希望有人指导一下,谢谢,下面是我自己写的class result_Frame(wx.Frame):
    def __init__(self):
      wx.Frame.__init__(self,None,-1)
      self.panel=wx.Panel(self)
      
      user='admin'
      password='newbie'
      db='test'
      col='test'
      f=open('ser_list.txt','r')

      for line in choice_list:
            result_dic=[]
            sername=line
            ipaddr=line
            client=mongo_con(ipaddr,user,password)
            max_len=0
            for i inclient.exec_db(db,col,"find({},{'_id':False})"):
                i['sername']=sername
                result_dic.append(i)
                if len(i)>max_len:
                  max_len=len(i)
                  keys=i.keys()
            self.list=wx.ListCtrl(self.panel, -1, (15, 50), (500, 250), style=wx.LC_REPORT | wx.LC_HRULES | wx.LC_VRULES)
            for i in range(max_len):
                self.list.InsertColumn(i,keys)
            row=0
            for line in result_dic:
                print line
                self.list.InsertStringItem(row,sername)
                #self.list.SetStringItem(row,1,str(line['old']))
                if line['name']:
                  self.list.SetStringItem(row,2,line['name'])
                row+=1
               
               
               
      f.close()
import pymongo

class mongo_con():
    def __init__(self,host,user,passwd):
      self.host=host
      self.port=27017
      self.user=user
      self.password=passwd
      self.client=pymongo.MongoClient(self.host,self.port)
      db=self.client['admin']
      db.authenticate(self.user,self.password)


    def exec_db(self,dbname,collection,query):
      list=[]
      db=self.client
      col=db
      exec 'a=col.'+query
      return a
   

icymirror 发表于 2014-08-20 14:11

回复 1# hucuibai
Q: 怎么把这个内容显示到一个列表里面呢,这个列的数目不确定是多少列(这个又点麻烦),
A: 把每一行当作一个字典,加入到结果的列表里面去,这样,你得到的是一个字典列表,剩下的就不需要关心有几列了,只要符合字典的要求就好了。

Q: 怎么才能在一个列表里面往列表后面追加呢,
A: 如果是要把追加的对象作为列表的元素,可以用result.append(new-list-item)
    如果是新追加的是列表,并且是只把元素加入进来,但不是作为一个列表元素加入列表,可以用result.extend(new-list)

Q: 还有怎么能吧列表里面的内容导出
A: 不是很确定导出指的是什么,也许你可以考虑使用
import pprint
pprint.pprint(result)
来试下。

hucuibai 发表于 2014-08-20 16:25

本帖最后由 hucuibai 于 2014-08-20 16:33 编辑

回复 2# icymirror

非常感谢,前面的两个问题已经解决,剩下一个导出的问题,就是想把查询结果 导出到excel文件,我列表用的wx.listctrl类,不知道有什么方法可以导出列表里面的内容,还有就是ipfile = glob.glob('query/*.txt')
self.cmbox2 = wx.ComboBox(self.panel, -1, "查询文本", pos=(415, 422), size=(100, 30), choices=ipfile)这个combobox类的choies可以去掉路径吗,我这个显示的是全路径


求解决,再次感谢楼上这位朋友,等了一天终于有了一个回复




   

lastexile 发表于 2014-08-20 19:14

还没有这样操作用wxpython

hucuibai 发表于 2014-08-21 09:45

回复 4# lastexile


那是要用什么?我也是现学现用,东拼西凑的

   

lastexile 发表于 2014-08-21 14:21

我说很少用python做界面

hucuibai 发表于 2014-08-21 15:22

回复 6# lastexile


    哦哦 ,我只会python,.net什么的早忘了,wxpython中文资料有点少,英文阅读能力有限,编程的经验也有限:D,搞了两天,问题差不多都搞定了,感谢楼上两位的回复
页: [1]
查看完整版本: wxpython列表