部分是为了学习,部分是为了帮助自己我正在尝试编写一个带有编码/解码GUI的应用程序。目前,我只是在编码。
我有一个Tkinter菜单,它将变量提供给GUI def,项目指定为base64
,urllib
或编码十六进制。
GUI上存在一个运行gettext
的按钮。我很难让encodedvar
包含进程+变量,并且结果显示在底部框架中。
在运行时,此时,底部框架中出现以下内容(作为示例) - blackcat显然是输入到中间框架的内容。
base64.encodestring('blackcat
')
有两个问题:
使代码实际格式正确,即不超过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)
答案 0 :(得分: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)