Преобразование типов в Python (StringVar в String) - PullRequest
0 голосов
/ 04 октября 2018

Я хотел преобразовать StringVar в String в Python.

Цель : строка, введенная в поле ввода (tkinter), должна быть преобразованав строку и затем закодирован, чтобы получить его хеш.

Ниже мой код:

txt1 = StringVar()
scantxt = ttk.Entry(win, textvariable = txt1).pack()

txt1 = str(txt1.get()).encode()
sha256 = hashlib.sha256(txt1)
estr = sha256.hexdigest()

В результате я получаю хэш пустого текста.

Я не знаю, где я иду не так.Пожалуйста, помогите.

Спасибо за ожидаемую помощь.

1 Ответ

0 голосов
/ 04 октября 2018

Обычно, программа с графическим интерфейсом находится в цикле, ожидая событий, чтобы ответить.Размещенный вами фрагмент кода этого не делает.

Вам не нужен 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, он не сохраняет ссылку на виджет Entry.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...