背景信息
我正在为一个学校项目写一套破解Vigenere密码的工具。有一个问题,我知道我可以解决,如果我可以传递指针,如C,但我启动了这个Python,我不想重写一切。代码在https://github.com/DarkFireGuy/cracking-vigenere上,如果您想看到
问题
freq_analysis.py
有一个函数_plot()
,用于绘制和保存图像。在pyplot创建了图形之后,我检查该文件是否有扩展名。如果没有,那么我从simple_popup()
(小集合的漂亮小函数)调用tools.py
。此调用向函数发送三条信息,使我更容易简化tkinter的使用:
告诉用户文件名是坏的并且没有扩展名的消息,what.
如果用户按下按钮输入新名称,我将调用simple_popup_input()
(尚未写入)接受新输入。但是,在我弄清楚如何将输入输入到fext
(文件扩展名)之前,我无法做到这一点。目前,我正在使用exec获取用户输入,并将其放入fext
( cml上的txt,还没有漂亮的裤子tkinter ),但是这个fext
与以前的fext
不同。要解决所有这些问题,我需要写到fext
所在的地址。谷歌告诉我,这是不可能的蟒蛇,所以我已经来到智者委员会,看看我应该做什么。
解决办法?
重写了整个过程
fext
的
simple_popup_input()
调用之后读取它--不想这样做,因为有一个更优雅的解决方案--func1
和func2
的参数。simple_popup
头将变成:def simple_popup(message="Error",f1=lambda: True,f2=lambda: True,args1: tuple = (),args2: tuple = (),option1: str = "Yes",option2: str = "No")
req_analysis.py
问题代码片段:
# Rename file if it does not contain an extension
output, fext = os.path.splitext(output)
if not fext:
simple_popup(message="The file name you have chosen does not contain an extension",
f1=lambda: exec("fext = str(input(\"New extension: \"))"),
option1="Enter new name",
option2="Save without extension"
)
output = output+fext
print(output)
tools.py
问题代码片段:
def simple_popup(message="Error",
f1=lambda: True,
f2=lambda: True,
option1: str = "Yes",
option2: str = "No"):
def func1():
f1()
popup.quit()
def func2():
f2()
popup.quit()
popup = tk.Tk()
label = tk.Label(popup, text=message)
button1 = tk.Button(popup, text=option1, command=func1)
button2 = tk.Button(popup, text=option2, command=func2)
for tmp in [label, button1, button2]:
tmp.pack()
popup.mainloop()
发布于 2020-11-16 14:07:06
你问错问题了。你的问题应该是:“有没有更好的办法做这件事?”的确有。使用messagebox
。
import tkinter as tk
from tkinter import messagebox
import os
root = tk.Tk()
path = r'C:\Some\Path'
_, ext = os.path.splitext(path)
if not ext and not messagebox.askyesno('Missing Extension', 'Save without extension?'):
#the user may provide a dot ~ strip it out and rely on our static dot
path = f"{path}.{input('submit new extension: ').lstrip('.')}"
print(path)
root.mainloop()
https://stackoverflow.com/questions/64865941
复制