You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Tkinter获取Entry组件二进制文本?按钮点击无响应求助

问题分析与解决方案

核心问题1:Save Key按钮无响应

你的save_button定义时犯了典型错误:command参数传入了函数执行结果(带括号),而非函数本身。这会导致程序启动时就自动执行save_key_to_file(),点击按钮时反而没有绑定任何触发逻辑。

修复:
将command=save_key_to_file()改为command=save_key_to_file

核心问题2:Entry.get()无输出/内容异常

Fernet.generate_key()返回的是bytes类型,直接插入Entry会被自动转为带b''前缀的字符串(比如b'abc123')。如果没点击Generate Key按钮,Entry是空的,get()自然无输出;即使生成了key,直接获取的字符串带b'',后续encode会得到错误的二进制数据。

修复:
修改generate_key函数,将bytes转成UTF-8字符串后再插入Entry:

def generate_key():
    key = Fernet.generate_key()
    key_entry.delete(0,"end")
    # 将二进制key解码为字符串,去掉b''前缀
    key_entry.insert(0, key.decode('utf-8'))

从Entry获取二进制文本的正确方式

Entry只能存储字符串,获取后需将字符串重新编码为bytes:

# 从Entry获取字符串,再编码为二进制
key_str = key_entry.get().strip()
key_bytes = key_str.encode('utf-8')

注意:若从文件加载二进制key,需先解码为字符串再插入Entry,保证格式统一。

额外修复:Load Key函数的错误

原select_key函数语法错误,正确加载逻辑如下:

def select_key():
    try:
        with open("file.key", "rb") as file:
            key_bytes = file.read()
            key_entry.delete(0, "end")
            key_entry.insert(0, key_bytes.decode('utf-8'))
    except FileNotFoundError:
        print("未找到file.key文件")

同时给Load按钮绑定该函数:load_button = tk.Button(..., command=select_key)

修改后的完整代码

from tkinter import filedialog
import tkinter as tk
from tkinter import *
from cryptography.fernet import Fernet
import pyperclip
import os

root = Tk()

key_entry = tk.Entry(root, bg="grey", fg="green", width="50")
key_entry.place(x=35, y=100)

def select_key():
    try:
        with open("file.key", "rb") as file:
            key_bytes = file.read()
            key_entry.delete(0, "end")
            key_entry.insert(0, key_bytes.decode('utf-8'))
    except FileNotFoundError:
        print("未找到file.key文件")

def generate_key():
    key = Fernet.generate_key()
    key_entry.delete(0,"end")
    # 将二进制key解码为字符串插入Entry
    key_entry.insert(0, key.decode('utf-8'))

def save_key_to_file():
    key_str = key_entry.get().strip()
    print(key_str)
    if not key_str:
        print("请先生成或输入密钥")
        return
    key_bytes = key_str.encode('utf-8')
    with open("file.key", "wb") as file:
        file.write(key_bytes)
    print("密钥已保存到file.key")

# 修复Load按钮的command绑定
load_button = tk.Button(root, text="Load Key", state="normal", borderwidth=0, bg="black", fg="green", activebackground='#2e2e2e', activeforeground="green", command=select_key)
load_button.place(x=359, y=130)

# 修复Save按钮的command参数(去掉括号)
save_button = tk.Button(root, command=save_key_to_file, text="Save Key", state="normal", borderwidth=0, bg="black", fg="green", activebackground='#2e2e2e', activeforeground="green")
save_button.place(x=270, y=130)

def button_clicked():
    generate_key()

button = tk.Button(text="Generate key", borderwidth=0, bg="black", fg="green", activebackground='#2e2e2e', activeforeground="green", command=button_clicked)
button.place(x=35, y=130)

root.mainloop()

内容的提问来源于stack exchange,提问作者P1xelCyber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 06:55:11