0

一部は学ぶため、一部は自分自身を助けるために、エンコード/デコード用のGUIを備えたアプリを作成しようとしています。現在、私はエンコーディングに取り組んでいます。

base64urllibまたはエンコード16進数として指定された項目を使用して変数をGUIdefにフィードするTkinterメニューがあります。

を実行するGUIにボタンがありますgettextencodedvarプロセス+変数を含めて、結果を下のフレームに表示するのに問題があります。

これを実行すると、現時点では、下のフレームに次のように表示されます(例として)-黒猫は明らかに中央のフレームに入力されたものです。

base64.encodestring('blackcat
')

2つの問題があります:

  1. コードを実際に正しくフォーマットする、つまり上記のように2行を超えないようにする

  2. コマンド自体を下部に出力するのではなく、コードを実行してもらいます。

私が使用しているコードを以下に示します。

def gui(item):
    if item == 'encode_b64':
        process = 'base64.encodestring'
    elif item == 'encode_url':
        process = 'urllib.quote_plus'
    else:
        process = '.encode("hex")'


    def getText():
        bottomtext.delete(1.0, END)
        var = middletext.get(1.0, END)

        encodedvar = process + "('%s')" % var
        bottomtext.insert(INSERT, encodedvar)
4

1 に答える 1

1

テキストウィジェットは末尾の改行を保証するため"end-1c"、テキストウィジェットのコンテンツを取得するときに使用する必要があります。そうすることで、ユーザーが入力したテキストのみを取得し、末尾に改行を追加する必要はありません。

次に、関数を出力する代わりに実行するには、実際の関数を変数に格納してから、変数を使用して関数を呼び出します。

if item == 'encode_b64':
    process = base64.encodestring
elif item == 'encode_url':
    process = urllib.quote_plus
else:
    process = default_encode

def default_encode(s):
    s.encode("hex")
...
bottomtext.insert(INSERT, process(var))

上記は、次のようにもう少し簡潔に書くことができます。

mapping = {"encode_b64": base64.encodestring,
           "encode_url": urllib.quote_plus}
process = mapping.get(item, default_encode)
于 2012-07-20T10:49:04.303 に答える