Tkinter:如何限制用户使用一些功能

Tkinter: How to limit user to a number of functions

我正在创建一个 turtle 程序,它从文本小部件获取命令,然后在 tkinter 上绘制 Canvas。但是当我 eval() 来自 Text 小部件的命令时,程序将变成 Python Shell (它甚至会接受 print("Hello World") 作为乌龟命令)

我想说的是:

from tkinter import *
import turtle
root = Tk()
canvas = Canvas(root)
tt = turtle.RawTurtle(canvas)
def moveForward (pixels):#Custom function
    tt.forward(pixels)

command = "print("Hello World")"
yourCommand = eval(command) # it would accept this as a turtle command

root.mainloop()

有人可以向我解释如何将用户输入限制为仅创建的自定义命令吗?

避免eval()——取而代之的是考虑合法命令的数据结构,并将实现这些命令的代码视为数据。为了简单起见,我在下面仅使用 turtle 模块实现了一个示例:

import turtle

commands = {
    'moveForward': lambda pixels: turtle.forward(pixels),
    'moveBackward': lambda pixels: turtle.backward(pixels),
    # ...
}

command, *arguments = input().strip().split()

if command in commands:
    (commands[command])(int(arguments[0]))

turtle.mainloop()

运行 程序并输入 'moveForward 100' 它应该按照您的要求执行,不需要 eval。这可以变得更加复杂,在字典中提供有关每个命令的参数数量和类型的信息。