繁体   English   中英

在Python中引用另一个function里面的一个变量

[英]Refer to a variable inside another function in Python

目的是让用户通过选择一个文件

select_file_en

然后将通过加密

encrypt

我希望程序将所选文件的文件名保存在一个变量中,加密部分可以访问该变量。 我是新手,所以如果这很容易解决,请告诉我。 代码可以在https://github.com/KDropZ/NDA/blob/main/main.py找到,目前还不是最终版本。 当我运行加密部分时,出现以下错误,所以我猜我“调用”变量的方式似乎是错误的?

Exception in Tkinter callback Traceback (most recent call last):  
File "/usr/lib/python3.8/tkinter/__init__.py", line 1892, in __call__
    return self.func(*args) TypeError: encrypt() missing 1 required positional argument: 'filename'

附加信息:Python 3.8.10、Tkinter 8.6、Ubuntu 操作系统

代码示例


import tkinter as tk
from tkinter import ttk
import tkinter.font as font
from tkinter import filedialog as fd
from tkinter.messagebox import showinfo
import os

def select_file_en():
    filetypes = (
        ('All files', '*.*'),       
        )

    filename = fd.askopenfilename(
        title='Choose a file to encrypt',
        initialdir='/',
        filetypes=filetypes)

    showinfo(
        title='Selected File',
        message=filename
        )

def encrypt(filename):
    to_encrypt = open(filename, "rb").read()
    size = len(to_encrypt)
    key = os.urandom(size)
    with open(filename + ".key", "wb") as key_out:
        key_out.write(key)
        encrypted = bytes(a^b for (a,b) in zip(filename, key))
    with open(filename, "wb") as encrypted_out:
        encrypted_out.write(encrypted)

问题在第 127 行:

tk.Button(root, cursor='hand2', text='Encrypt file', font=buttonFont, bg='#FF6D6D', fg='#ffffff', command=encrypt).place(anchor='nw', relx='0.78', rely='0.12', x='0', y='0')

您在单击按钮( command=encrypt )时调用了encrypt(filename) function ,但您没有提供文件名:这也是您的错误消息所说的: missing 1 required positional argument: 'filename'

您需要找到一种方法来为 tkinter 按钮中的 function 提供一个变量: 看这里。

基本上,您需要将在select_file_en()中选择的文件名保存到一个变量(我们称之为my_filename ),然后使用lambda function(ELI5:一个小的 function,经常在另一个函数中使用)将变量传递给tkinter 按钮中使用的命令:

command= lambda: encrypt(my_filename)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM