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()
你的问题可能出在获取路径时,你在获取路径的函数中使用了 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))
这样才能正常调用比较函数。
不知道你这个问题是否已经解决, 如果还没有解决的话:好问题!!抱歉我也不太懂,你问问chatGPT吧:https://new.quke123.com/
或者问下其他Python群友:https://app.yinxiang.com/fx/13ce6bbd-f36f-4e92-be53-92dd381ed729