我在Tkinter中有一个将文件保存到用户计算机的函数。如果用户试图保存一个已经存在的文件,我会尝试为用户创建一个提示,询问他们是否要覆盖现有文件。我不会包括整个代码,因为它有3000多行,但我尝试做的一个示例:
第一个月
def overWritePrompt():
promptFrame = tk.Frame(maniWin, bg=_blk)
promptFrame.place(relx=.4,rely=.2,relheight=.1,relwidth=.2)
promptHead = tk.Label(promptFrame, bg=_blk, fg=_wht, text="Overwrite existing route?")
promptHead.place(relx=0,rely=0,relheight=.4,relwidth=1)
promptYes = tk.Button(promptFrame, bg=_dgrn, fg=_wht, text="Yes", relief="sunken", activebackground=_dgrn, activeforeground=_wht, command=lambda:(selection(True)), borderwidth=0)
promptYes.place(relx=.1,rely=.5,relheight=.4,relwidth=.35)
promptNo = tk.Button(promptFrame, bg=_red, fg=_wht, text="No", relief="sunken", activebackground=_red, activeforeground=_wht, command=lambda:(selection(False)), borderwidth=0)
promptNo.place(relx=.45,rely=.5,relheight=.4,relwidth=.35)
def selection(response):
promptFrame.destroy()
return response
def saveFile(fileName):
overwrite = False
if os.path.exists(os.path.join(directory, fileName)):
overwrite = overwritePrompt()
if overwrite:
os.path.remove(fileName)
os.path.save(fileName)
else:
os.path.save(fileName)
我希望它向用户显示提示,并在继续保存部分之前等待响应,但是它只是立即返回None
作为覆盖布尔值,并继续执行其余代码。
为什么overwrite = overwritePrompt()
不在继续之前等待overWritePrompt()
返回?
我试过在不同的地方添加while循环,以防止代码在用户输入答案之前继续运行,但这只是完全冻结了应用程序。
2条答案
按热度按时间mzsu5hc01#
嵌套函数
selection()
根本不与外部函数overwritePrompt
进行迭代,因此它的return
语句不会影响外部函数返回的值。selection()
在这方面与其他函数一样,只是一个普通函数。你可以使用一个内置的Tk消息框来简化整个过程:
m4pnthwp2#
我找到的解决方案是使用“保存”按钮,首先调用
overWritePrompt()
***,然后让提示符检查文件是否存在,然后将用户输入的结果传递给saveFile()
函数。