首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何保存附加到tkinter按钮的函数的返回值?

如何保存附加到tkinter按钮的函数的返回值?
EN

Stack Overflow用户
提问于 2020-11-16 21:25:28
回答 1查看 73关注 0票数 2

背景信息

我正在为一个学校项目写一套破解Vigenere密码的工具。有一个问题,我知道我可以解决,如果我可以传递指针,如C,但我启动了这个Python,我不想重写一切。代码在https://github.com/DarkFireGuy/cracking-vigenere上,如果您想看到

问题

freq_analysis.py有一个函数_plot(),用于绘制和保存图像。在pyplot创建了图形之后,我检查该文件是否有扩展名。如果没有,那么我从simple_popup() (小集合的漂亮小函数)调用tools.py。此调用向函数发送三条信息,使我更容易简化tkinter的使用:

告诉用户文件名是坏的并且没有扩展名的消息,what.

  • Functions

  • 按钮标签告诉用户要做的是什么。

如果用户按下按钮输入新名称,我将调用simple_popup_input() (尚未写入)接受新输入。但是,在我弄清楚如何将输入输入到fext (文件扩展名)之前,我无法做到这一点。目前,我正在使用exec获取用户输入,并将其放入fext ( cml上的txt,还没有漂亮的裤子tkinter ),但是这个fext与以前的fext不同。要解决所有这些问题,我需要写到fext所在的地址。谷歌告诉我,这是不可能的蟒蛇,所以我已经来到智者委员会,看看我应该做什么。

解决办法?

  1. 用C

重写了整个过程

fext

  1. 想出了如何获取内存地址

  1. (写这篇文章的时候刚来找我)把新的文件扩展名写到一个临时文件中,然后在simple_popup_input()调用之后读取它--不想这样做,因为有一个更优雅的解决方案--

  1. 不知道它将如何工作,而是包含两个元组,其中包含传递给func1func2的参数。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问题代码片段:

代码语言:javascript
代码运行次数:0
运行
复制
# 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问题代码片段:

代码语言:javascript
代码运行次数:0
运行
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-16 22:07:06

你问错问题了。你的问题应该是:“有没有更好的办法做这件事?”的确有。使用messagebox

代码语言:javascript
代码运行次数:0
运行
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64865941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档