{"id":38,"date":"2021-08-17T10:40:00","date_gmt":"2021-08-17T02:40:00","guid":{"rendered":"http:\/\/119.23.244.75\/?p=38"},"modified":"2021-09-29T13:36:03","modified_gmt":"2021-09-29T05:36:03","slug":"tkinter%e6%89%93%e5%bc%80excel%e6%96%87%e6%a1%a3%e4%bf%ae%e6%94%b9%e4%bf%9d%e5%ad%98python","status":"publish","type":"post","link":"https:\/\/www.keioi.cn\/archives\/38","title":{"rendered":"tkinter\u6253\u5f00excel\u6587\u6863\u4fee\u6539\u4fdd\u5b58(python)"},"content":{"rendered":"\n<p>tkinter \u662f Python \u7684\u6807\u51c6 GUI \u5e93\u3002\u5185\u7f6e\u5230 python \u7684\u5b89\u88c5\u5305\u4e2d\uff0c\u53ef\u4ee5\u76f4\u63a5import\u4f7f\u7528\u3002<\/p>\n\n\n\n<p>\u5b66\u4e60\u7528tkinter \u7ec4\u4ef6treeview\u663e\u793aexcel\u5185\u5bb9\u518d\u901a\u8fc7\u70b9\u51fb\u4fee\u6539\u4fdd\u5b58\u56de\u53bb\u65b0\u5de5\u4f5c\u8868\u3002<\/p>\n\n\n\n<p>\u9664\u4e86tkinter\u7684\u5185\u5bb9\uff0c\u8fd8\u6d89\u53ca\u5230excel\u6587\u6863\u7684\u64cd\u4f5c\u3002<\/p>\n\n\n\n<p>\u8fd9\u91cc\u6211\u7528\u5230openpyxl\u5e93\uff0c\u8fd9\u662f\u7b2c\u4e09\u65b9\u5e93\u8981pip\u5b89\u88c5\u3002\u5728windows\u7cfb\u7edf\u4e0b\u8fb9\u5b66\u8fb9\u5199\uff0c\u8fd9\u91cc\u4f5c\u4e00\u4e2a\u8bb0\u5f55\u603b\u7ed3\u3002<\/p>\n\n\n\n<p><strong>\u5f00\u59cb\u524d<\/strong><\/p>\n\n\n\n<p>\u5f00\u59cb\u65f6\u8bbe\u60f3\u662f\u6253\u5f00\u4e00\u4e2a\u754c\u9762\u91cc\u9762\u6709\u6253\u5f00\uff0c\u4fdd\u5b58\u6309\u94ae\u3002\u70b9\u5f00\u9009\u62e9\u6587\u6863\u540e\u5185\u5bb9\u663e\u793a\u5230\u754c\u9762\u4e0a\uff0c\u7136\u540e\u5728treview\u5185\u53cc\u51fb\u4fee\u6539,\u6539\u5b8c\u70b9\u4fdd\u5b58\u6309\u94ae\u4fdd\u5b58\u3002<\/p>\n\n\n\n<p>\u5b9e\u529b\u6709\u9650\uff0c\u5c31\u6362\u4e86\u53e6\u4e00\u4e2a\u65b9\u6cd5\uff08\u7ed5\u4e86\u4e00\u4e0b\uff09\u3002\u5b9e\u73b0\u6253\u5f00\u4fee\u6539\u4fdd\u5b58\uff0c\u4e0b\u9762\u4f1a\u8bf4\u5230\u3002<\/p>\n\n\n\n<p><strong>\u5f00\u5199\uff0c\u6253\u5f00\u7a97\u53e3<\/strong><\/p>\n\n\n\n<p>\u9996\u5148\u8981\u663e\u793a\u4e2a\u7a97\u53e3\u3002\u4e0a\u9762\u8bf4\u5230\u7684\u4e24\u4e2a\u6309\u94ae\u9009\u6587\u4ef6\u540e\u663e\u793a\u5185\u5bb9\u5230\u4e0a\u9762\u6ca1\u627e\u5230\u89e3\u51b3\u65b9\u6cd5\u3002\u6211\u505a\u7684\u662f\u5148\u4e00\u4e2a\u7a97\u53e3\u663e\u793a\u6253\u5f00\u6309\u94ae\uff0c\u9009\u4e2d\u6587\u6863\u540e\u518d\u6253\u5f00\u4e00\u4e2a\u663e\u793a\u5185\u5bb9\u7684\u7a97\u53e3\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import tkinter as tk\nfrom tkinter import filedialog\n\ndef openbook():\n    fpath=filedialog.askopenfilename()\n    print(fpath)\n    if fpath:\n        pass\n\nwino=tk.Tk()\nwino.geometry('200x100')\nbtno=tk.Button(wino,text='\u6253\u5f00', command=openbook)\nbtno.pack(side=tk.TOP,expand = tk.YES)\nwino.mainloop()<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/oscimg.oschina.net\/oscnet\/up-973d484c208259ceccc3a94c88a1a5f1e87.gif\" alt=\"\"\/><\/figure>\n\n\n\n<p>tkinter\u5e93\u91cc\u7684filedialog\u6253\u5f00\u9009\u62e9\u6587\u4ef6\u5bf9\u8bdd\u6846\u3002<\/p>\n\n\n\n<p>geometry()\u7a97\u53e3\u5927\u5c0f<\/p>\n\n\n\n<p>\u90a3\u4e48\u73b0\u5728\u5c31\u6e05\u695a\u4e86\uff0c\u5728openbook\u91cc\u9762pass\u5199\u4e00\u4e2a\u51fd\u6570\u66ff\u6362\u3002<\/p>\n\n\n\n<p><strong>\u6253\u5f00excel<\/strong><\/p>\n\n\n\n<p><strong>\uff08\u53ea\u5bf9\u6709\u4e00\u884c\u6807\u9898\u7684\u5185\u5bb9\uff0c\u770b\u4e0b\u9762\u6587\u6863demo\u56fe\u7247\uff09<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def win_openxls(fpath):\n    global wino\n    wino.destroy()\n    savepath=fpath\n    w=xl.load_workbook(fpath)\n    name=w.sheetnames\n    print(name)\n\n    sheet=w&#91;name&#91;0]]\n    n=sheet.max_row\n    col=sheet.max_column\n\n    xlarr=&#91;]\n    for r in sheet.rows:\n        arr=&#91;]\n    for cell in r:\n            arr.append(cell.value)\n        xlarr.append(arr)\n \n    win=tk.Tk()\n    win.geometry('800x400')\n\n    colname=&#91;]\n    for c in range(col):\n        colname.append(c)\n\n    tree=ttk.Treeview(win,show='headings',columns=colname,selectmode = 'browse')#\u5355\u884c\u9009\u4e2d\u6a21\u5f0f\n\n    for c in range(col):\n        tree.column(c,width=90,anchor='center')\n        tree.heading(c,text=xlarr&#91;0]&#91;c])#\u663e\u793a\u6807\u9898\n\n    titles=xlarr&#91;0]\n\n    del(xlarr&#91;0])#\u5220\u4e86\u7b2c\u4e00\u4e2a,\u4e0d\u5220\u663e\u793a\u5185\u5bb9\u7b2c\u4e00\u884c\u4e0e\u6807\u9898\u91cd\u590d\n\n    for i in range(n-1):\n        tree.insert('',i,values=xlarr&#91;i])#\u663e\u793a\u5185\u5bb9\n\n    tree.pack(side=tk.TOP,fill=None,)\n\n    btn1=tk.Button(win,text='\u4fdd\u5b58', command=savebook)\n    btn1.pack(side=tk.BOTTOM,expand = tk.YES)\n\n    #tree.bind('&lt;Double-Button-1&gt;',viewclick)#\u540e\u9762\u7528\u5230,\u76d1\u63a7\u9f20\u6807\u53cc\u51fb\n    win.mainloop()<\/code><\/pre>\n\n\n\n<p>\u8fd9\u4e2a\u51fd\u6570\u662f\u6253\u5f00\u6587\u6863\u5185\u5bb9\u663e\u793a\u5230\u754c\u9762\u4e0a\u3002\u66ff\u6362openbook\u7684pass\u3002<\/p>\n\n\n\n<p>\u6587\u6863\u5185\u5bb9demo\u8fd9\u6837\u7684<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/oscimg.oschina.net\/oscnet\/up-0133db90584032d5cc73435714ae4eefa59.JPEG\" alt=\"\"\/><\/figure>\n\n\n\n<p>\u8fd0\u884c\u9009\u62e9\u8fd9\u4e2a\u6587\u6863\u540e<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/oscimg.oschina.net\/oscnet\/up-2ee7e4755093980298fbe92f4e29135a48f.JPEG\" alt=\"\"\/><\/figure>\n\n\n\n<p>wino.destroy()#\u5173\u95ed\u9009\u62e9\u7a97<\/p>\n\n\n\n<p>sheet=w[name[0]]#\u8bfb\u53d6Sheet1\u5de5\u4f5c\u8868\u5185\u5bb9<\/p>\n\n\n\n<p>n=sheet.max_row#\u53d6\u5185\u5bb9\u884c\u6570<\/p>\n\n\n\n<p>col=sheet.max_column#\u53d6\u5185\u5bb9\u5217\u6570<\/p>\n\n\n\n<p>xlarr.append(arr)#\u5217\u8868\u4fdd\u5b58excel\u5185\u5bb9<\/p>\n\n\n\n<p>colname.append(c)#\u5217\u8868\u4fdd\u5b58\u7528\u5230treeview\u6807\u9898<\/p>\n\n\n\n<p>\u8fd8\u6709\u4e9b\u5728\u4ee3\u7801\u6ce8\u91ca\u4e86\u3002<\/p>\n\n\n\n<p><strong>\u7f16\u8f91\u5185\u5bb9<\/strong><\/p>\n\n\n\n<p>\u7528\u5230\u4e0a\u9762\u6ce8\u91ca\u6389\u7684\u76d1\u63a7\u9f20\u6807\u53cc\u51fb\u3002<\/p>\n\n\n\n<p>tree.bind(&#8216;&lt;Double-Button-1&gt;&#8217;,viewclick)<\/p>\n\n\n\n<p>\u53cc\u51fb\u540eviewclick\u51fd\u6570\u5904\u7406\uff0c\u5f39\u51fa\u4e00\u4e2a\u7a97\u4fee\u6539\u518d\u4fdd\u5b58\u56de\u53bb\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def viewclick(event):\n    global nwin\n    global tree\n    global enty\n    global sitem\n    global colint\n    for item in tree.selection():\n        ttext=tree.item(item,'values')\n        sitem=item\n\n    col=tree.identify_column(event.x)\n    colint=int(str(col.replace('#','')))\n    \n    nwin=tk.Tk()#\u7f16\u8f91\u7a97\u53e3\n    nwin.geometry(\"260x100\")\n    label1 = tk.Label(nwin, text=\"\u4fee\u6539\uff1a\")\n    label1.pack(side=tk.LEFT, fill=None)\n    enty=tk.Text(nwin,width=300,height=300,wrap = tk.WORD)\n    enty=tk.Entry(nwin)\n    enty.pack(side=tk.LEFT, fill=None)\n    btn=tk.Button(nwin,text='\u786e\u8ba4', command=getv)\n    btn.pack(side=tk.LEFT,padx=6,ipadx=6)\n    enty.insert('end',ttext&#91;colint-1])#\u7f16\u8f91\u6846\u663e\u793a\u503c\n    openwin.append(nwin)\n  \n    if len(openwin)&gt;1:\n        openwin.pop(0).destroy()\n    nwin.protocol('WM_DELETE_WINDOW', initopenwin)#\u7ed1\u5b9a\u65f6\u4ef6,\u5173\u95ed\u7a97\u6e05\u9664\u53d8\u91cf\u503c\n    nwin.mainloop()<\/code><\/pre>\n\n\n\n<p>tree.selection()#\u53d6\u5230items\uff08\u9009\u4e86\u90a3\u884c\uff09<\/p>\n\n\n\n<p>tree.item(item,&#8217;values&#8217;)#\u9009\u4e2d\u884c\u7684\u6240\u6709\u503c<\/p>\n\n\n\n<p>tree.identify_column(event.x)#event.x\u9009\u4e2d\u7684x\u5750\u6807,identify_column()\u8fd4\u56de\u5750\u6807\u5217\u6807\u5982:#1 \u8868\u793a\u7b2c1\u5217\u3002\u8fd9\u91cc\u518dreplace\u5c31\u53d6\u91cc\u9762\u7684\u6570\u5b57\u3002<\/p>\n\n\n\n<p>openwin.pop(0).destroy()#\u9632\u6b62\u6253\u5f00\u591a\u4e2a\u7f16\u8f91\u7a97\u53e3<\/p>\n\n\n\n<p>\u53d6\u503c\u51fd\u6570<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def getv():\n    global nwin\n    global enty\n    global tree\n    global sitem\n    global colint\n    global openwin\n    editxt=enty.get()\n    tree.set(sitem,(colint-1),editxt)\n    openwin=&#91;]\n    nwin.destroy()<\/code><\/pre>\n\n\n\n<p>\u53d6\u5230\u4fee\u6539\u7684\u503c<\/p>\n\n\n\n<p>tree.set(sitem,(colint-1),editxt)#\u66f4\u65b0\u4fee\u6539\u540e\u663e\u793a\u3002<\/p>\n\n\n\n<p><strong>\u4fdd\u5b58<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def savebook():\n    global w\n    global tree\n    global titles\n    global savepath\n    \n    ws=w.create_sheet('change1')\n    ws.append(titles)\n    for itm in tree.get_children():\n        ws.append(tree.item(itm)&#91;'values'])   \n     w.save(savepath)\n     messagebox.showinfo('\u63d0\u793a','\u4fdd\u5b58\u6210\u529f')<\/code><\/pre>\n\n\n\n<p>w.create_sheet(&#8216;change1&#8217;)#\u521b\u5efa\u5de5\u4f5c\u8868<\/p>\n\n\n\n<p>ws.append(titles)#\u6dfb\u52a0\u9996\u884c<\/p>\n\n\n\n<p>tree.get_children()#\u53d6\u5230treeview\u6807\u9898\u4e0b\u9762\u7684\u5185\u5bb9<\/p>\n\n\n\n<p>w.save(savepath)#\u4fdd\u5b58<\/p>\n\n\n\n<p><strong>\u6f14\u793a<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/oscimg.oschina.net\/oscnet\/up-3d69356129f5d609b437d281d92592c79c3.gif\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/oscimg.oschina.net\/oscnet\/up-e1afa02e70834062cd0e54eeed5d30a26d8.gif\" alt=\"\"\/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>tkinter \u662f Python&#46;&#46;&#46;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,4],"tags":[11],"class_list":["post-38","post","type-post","status-publish","format-standard","hentry","category-python","category-4","tag-python"],"_links":{"self":[{"href":"https:\/\/www.keioi.cn\/api\/wp\/v2\/posts\/38","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.keioi.cn\/api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.keioi.cn\/api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.keioi.cn\/api\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.keioi.cn\/api\/wp\/v2\/comments?post=38"}],"version-history":[{"count":1,"href":"https:\/\/www.keioi.cn\/api\/wp\/v2\/posts\/38\/revisions"}],"predecessor-version":[{"id":39,"href":"https:\/\/www.keioi.cn\/api\/wp\/v2\/posts\/38\/revisions\/39"}],"wp:attachment":[{"href":"https:\/\/www.keioi.cn\/api\/wp\/v2\/media?parent=38"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.keioi.cn\/api\/wp\/v2\/categories?post=38"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.keioi.cn\/api\/wp\/v2\/tags?post=38"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}