dakj910721 2023-04-03 23:18 采纳率: 100%
浏览 58
已结题

python 使用 entry.get()不能获取到输入的文件夹路径

python 使用 entry.get()不能获取到输入的文件夹路径
研究了一天一夜了。都不知道改怎么办了。
如以下代码所示,我想将获取到的路径赋值给pathjq变量和pathxq变量,但是都失败了,导致compare函数不能运行。

import tkinter
from tkinter import filedialog
import xlrd
from openpyxl import load_workbook
from openpyxl.styles import PatternFill
import openpyxl
import os
window = tkinter.Tk()
window.title = ("数据对比工具")
window.geometry('500x300')
def get_path1():
    path1 = filedialog.askdirectory(title='请选择文件夹路径')
    entry_text1.set(path1)
    return (path1)
def get_path2():
    path2 = filedialog.askdirectory(title='请选择文件夹路径')
    entry_text2.set(path2)
    return (path2)
entry_text1 = tkinter.StringVar()
entry = tkinter.Entry(window,textvariable=entry_text1,state='readonly')
entry.place(x=80,y=100,width=250)
entry_text2 = tkinter.StringVar()
entry = tkinter.Entry(window,textvariable=entry_text2,state='readonly')
entry.place(x=80,y=160,width= 250)

jqget = tkinter.Button(window,text='点此选择基期表\n所在文件夹',bg='#45b1e8',width=12,
                       height=2,command=get_path1)
jqget.place(x = 340,y=85)
xqget = tkinter.Button(window,text='点此选择现期表\n所在文件夹',bg='#45b1e8',width=12,
                       height=2,command=get_path2)
xqget.place(x=340,y=145)
# 就在此处,谢谢。
pathjq = entry_text1.get()+"\\"
pathxq = entry_text2.get()+"\\"
wx = tkinter.Label(window,text=pathjq)
wx.place(x= 100, y=250)
def compare(path1,path2):
    for filename1 in os.listdir(path1):
        for filename2 in os.listdir(path2):
            if filename1.endswith((".xls",".xlsx")) and filename2.endswith((".xls",".xlsx")) and filename1[0:12] == filename2[0:12]:
                wbjq = load_workbook(path1+filename1,data_only=True)
                wbxq = load_workbook(path2+filename2,data_only=True)
                wbdb = load_workbook(path2+filename2,data_only=True)
                wsjq = wbjq.active
                wsxq = wbxq.active
                wsdb = wbdb.active
                rows = wsdb.max_row
                cols = wsdb.max_column
                red_fill = PatternFill("solid", fgColor="FF0000")
                yellow_fill = PatternFill("solid", fgColor="ffff00")
                for i in range(1,rows + 1):
                    for j in range(1,cols + 1):
                        if (wsjq.cell(i,j).value) != (wsxq.cell(i,j).value):
                            wsdb.cell(i,j).value = "{} --> {}".format((wsjq.cell(i,j).value),(wsxq.cell(i,j).value))
                            if wsjq.cell(i,j).value == 0:
                                wsdb.cell(i,j).fill = red_fill
                            else:
                                try:
                                    int(float(wsxq.cell(i,j).value))
                                    int(float(wsjq.cell(i,j).value))
                                except ValueError as e:
                                    pass
                                else:
                                    rate = (wsxq.cell(i,j).value)/(wsjq.cell(i,j).value)-1
                                    if rate >= 0.2 or rate <= -0.2:
                                        wsdb.cell(i,j).fill = yellow_fill
                                        if rate >= 0.5 or rate <= -0.5:
                                            wsdb.cell(i,j).fill = red_fill
                if os.path.exists(path2 + filename2 + 'f.xlsx'):
                    pass
                else:        
                    wbdb.save(path2 + filename2 + '核对完成.xlsx')
cpbegin = tkinter.Button(window,text='开始比较',bg='#45b1e8',width=10,
                       height=1,command=(compare(pathjq,pathxq)))
cpbegin.place(x=200,y=200)
window.mainloop()

  • 写回答

3条回答 默认 最新

  • Dummer25 2023-04-04 11:26
    关注

    你的问题可能出在获取路径时,你在获取路径的函数中使用了 return (path1) 和 return (path2),但是并没有将这两个值传递给另外两个变量 pathjq 和 pathxq。因此可以尝试在获取路径的两个函数中加上如下代码:

    global pathjq, pathxq
    pathjq = entry_text1.get() + "\\"
    pathxq = entry_text2.get() + "\\"
    
    

    这样就可以将获取到的路径正确地赋值给 pathjq 和 pathxq。但是需要注意的是,在你的代码中,在界面初始化时就已经使用了 entry 来创建一个 Entry 对象,并使用到了 entry 这个变量名。因此,需要修改获取路径的两个函数中的代码,将 entry 这个变量名改为其他名称(例如 entry1 和 entry2)。除此之外,还需要将比较函数的调用方式从

    cpbegin = tkinter.Button(window,text='开始比较',bg='#45b1e8',width=10,
                           height=1,command=(compare(pathjq,pathxq)))
    
    

    改为

    cpbegin = tkinter.Button(window,text='开始比较',bg='#45b1e8',width=10,
                           height=1,command=lambda: compare(pathjq,pathxq))
    
    

    这样才能正常调用比较函数。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月12日
  • 已采纳回答 4月4日
  • 创建了问题 4月3日

悬赏问题

  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因