问题描述
我想将StringVar转换为Python中的String 。
目的 :必须将在“输入”字段(tkinter)中输入的字符串转换为字符串,然后进行编码以获取其哈希值。
下面是我的代码:
txt1 = StringVar()
scantxt = ttk.Entry(win, textvariable = txt1).pack()
txt1 = str(txt1.get()).encode()
sha256 = hashlib.sha256(txt1)
estr = sha256.hexdigest()
我得到的结果是空白文本的哈希。
我不知道我要去哪里错了。 请协助。
感谢您的帮助。
1楼
通常,GUI程序处于循环中,等待事件响应。 您发布的代码片段无法做到这一点。
您不需要StringVar即可完成此任务。
您可以为Entry小部件提供StringVar,但不需要它。
您可以使用.get
方法直接获取其文本内容。
但是,您确实需要一种方法来告诉您的程序何时应获取和处理该文本以及应如何处理。
有多种方法可以使用Entry小部件执行此操作:如果需要,可以将Entry文本发生的每次更改通知您的代码。
我们不需要这里,我们可以要求Tkinter在用户按下Return键时运行一个函数。
我们可以使用小部件的.bind
方法做到这一点。
import tkinter as tk
from tkinter import ttk
import hashlib
win = tk.Tk()
scantxt = ttk.Entry(win)
scantxt.pack()
def hash_entry(event):
txt1 = scantxt.get()
sha256 = hashlib.sha256(txt1.encode())
estr = sha256.hexdigest()
print(txt1, estr)
scantxt.bind("<Return>", hash_entry)
win.mainloop()
您会注意到我摆脱了
scantxt = ttk.Entry(win, textvariable = txt1).pack()
该.pack
方法(和.grid
& .place
方法)返回None
,所以上面的语句结合None
以名scantxt
,它不保存到输入构件的参考。