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
。这可以变得更加复杂,在字典中提供有关每个命令的参数数量和类型的信息。
我正在创建一个 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
。这可以变得更加复杂,在字典中提供有关每个命令的参数数量和类型的信息。