0

部分是为了学习,部分是为了帮助自己,我正在尝试编写一个带有用于编码/解码的 GUI 的应用程序。目前,我只是在进行编码。

我有一个 Tkinter 菜单,它向 GUI def 提供一个变量,其中项目指定为base64urllib或编码十六进制。

运行的 GUI 上存在一个按钮gettext。我很难encodedvar包含 process + 变量并将结果显示在底部框架中。

目前,在运行此程序时,底部框架中出现以下内容(作为示例) - blackcat 显然是输入到中间框架中的内容。

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 回答