从Python和Tkinter中的变量生成命令
一部分是为了学习,一部分是为了帮助自己,我正在尝试编写一个带有编码/解码GUI的应用程序。目前,我正在进行编码 我有一个Tkinter菜单,它向GUI def提供一个变量,其中的项指定为从Python和Tkinter中的变量生成命令,python,tkinter,Python,Tkinter,一部分是为了学习,一部分是为了帮助自己,我正在尝试编写一个带有编码/解码GUI的应用程序。目前,我正在进行编码 我有一个Tkinter菜单,它向GUI def提供一个变量,其中的项指定为base64、urllib或encoding hex GUI上存在一个按钮,该按钮运行gettext。我很难让encodedvar包含进程+变量并在底部框架中显示结果 在运行此命令时,下面的内容(作为示例)出现在底部框架中-blackcat显然是进入中间框架的内容 base64.encodestring('bla
base64
、urllib
或encoding hex
GUI上存在一个按钮,该按钮运行gettext
。我很难让encodedvar
包含进程+变量并在底部框架中显示结果
在运行此命令时,下面的内容(作为示例)出现在底部框架中-blackcat显然是进入中间框架的内容
base64.encodestring('blackcat
')
有两个问题:
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)
文本小部件保证有一个尾随的换行符,因此在获取文本小部件的内容时应该使用
“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)