【问题标题】:Tkinter: How to limit user to a number of functionsTkinter:如何限制用户使用多种功能
【发布时间】:2016-11-15 12:19:47
【问题描述】:

我正在创建一个从文本小部件获取命令的海龟程序,然后在 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()

有人可以向我解释如何将用户输入限制为仅创建的自定义命令。非常感谢!

【问题讨论】:

  • 您可以列出接受的命令,并在评估之前检查用户输入是否是其中之一。这可能需要一些正则表达式检查。

标签: python tkinter command turtle-graphics


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-06-19
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2022-11-07
    相关资源
    最近更新 更多