从Python和Tkin中的变量生成命令

2024-04-25 12:45:56 发布

您现在位置:Python中文网/ 问答频道 /正文

一部分是为了学习,一部分是为了帮助自己,我正在尝试编写一个带有编码/解码GUI的应用程序。目前,我正在研究编码。你知道吗

我有一个Tkinter菜单,它用指定为base64urllib或编码十六进制的项向GUI def提供变量。你知道吗

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

在运行这个程序时,下面的代码(作为一个示例)出现在底部框架中——blackcat显然是进入中间框架的内容。你知道吗

base64.encodestring('blackcat
')

有两个问题:

  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)

Tags: 代码框架编码defguiurllibitemprocess
1条回答
网友
1楼 · 发布于 2024-04-25 12:45:56

文本小部件保证有一个尾随的换行符,因此在获取文本小部件的内容时应该使用"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)

相关问题 更多 >