【问题标题】:Python: Button command + '&'Python:按钮命令 + '&'
【发布时间】:2014-09-05 17:00:58
【问题描述】:

我在这段代码中遇到了错误: 错误出现在 Button() 命令中的函数 settings() 中。但我没有任何计划如何解决它,对不起。我不能将这 3 个命令放在外部函数中,因为它不会获取变量...

from turtle import *
from tkinter import *
reset()
hastrail = 1
def moveup():
    setheading(90)
    forward(5)
def movedown():
    setheading(270)
    forward(5)
def moveright():
    setheading(0)
    forward(5)
def moveleft():
    setheading(180)
    forward(5)
def turnleft():
    left(18)
def turnright():
    right(18)
def forw():
    forward(5)
def backw():
    backward(5)
def trailrem():
    global hastrail
    if hastrail == 1:
        penup()
        hastrail = 0
    else:
        pendown()
        hastrail = 1
def settings():
    color(str(colorchooser.askcolor(title = "Change a line color")[1]),str(colorchooser.askcolor(title = "Change a fill color")[1]))
    tk = Tk ()
    tk.resizable(0,0)
    tk.title("Shape, Shapesize, Pensize")
    tk.geometry("400x90")
    listbox = Listbox(tk)
    listbox.place(x=0,y=0,width=200,height=90)
    listbox.insert(1,"arrow")
    listbox.insert(2,"turtle")
    listbox.insert(3,"circle")
    listbox.insert(4,"square")
    listbox.insert(5,"triangle")
    shsi = Scale(tk,width = 10,orient = HORIZONTAL)
    shsi.place(x=200,y=0,width=200,height=30)
    trsi = Scale(tk,width = 10, orient = HORIZONTAL)
    trsi.place(x=200,y=30,width=200,height=30)
    Button(tk,text="Save",command = lambda:shape(str(listbox.get(ACTIVE)))&shapesize(int(shsi.get()))&pensize(int(trsi.get()))).place(x=200,y=60,width=200,height=30)

onkeypress(moveup,"Up")
onkeypress(movedown,"Down")
onkeypress(moveright,"Right")
onkeypress(moveleft,"Left")
onkeypress(turnleft,"a")
onkeypress(turnright,"d")
onkeypress(forw,"w")
onkeypress(backw,"s")
onkeypress(trailrem,"t")
onkeypress(settings,"c")
listen()
mainloop()

请告诉我我做错了什么//请修复它。

【问题讨论】:

  • 具体问题是什么?您是否收到错误消息或堆栈跟踪?你期望会发生什么?发生了什么?
  • 另外,你的格式是可怕的。此代码无法阅读。看看PEP 8,Python 的官方风格指南。
  • 我收到一条错误消息。我想在一个按钮命令中更改海龟的形状、形状大小和笔大小。 pensize 没有改变,并出现错误消息:“TypeError: unsupported operand type(s) for &: 'NoneType' and 'NoneType'”
  • “我不能将这 3 个命令放在外部函数中,因为它不会获取变量” Python has closure,你知道的。
  • 尝试查找& operator 的实际作用。你可能想做点别的。

标签: python function button turtle-graphics


【解决方案1】:

如果您尝试使用 & 运算符将多个表达式串在一起,则它可能不会很好地工作,除非您的所有函数调用都返回整数,这里不是这种情况。我不建议这样做,但您可以将每个命令作为集合的单独元素,例如列表或元组:

Button(tk,text="Save",command = lambda:[
    shape(str(listbox.get(ACTIVE))),
    shapesize(int(shsi.get())),
    pensize(int(trsi.get()))
]).place(x=200,y=60,width=200,height=30)

我不能将这 3 个命令放在外部函数中,因为它不会获取变量

通常,这是真的。但是如果你在第一个内部定义第二个函数,它的所有变量仍然是可见的。

def settings():
    def save_button_clicked():
        shape(str(listbox.get(ACTIVE)))
        shapesize(int(shsi.get()))
        pensize(int(trsi.get()))
    #rest of `settings` code goes here...
    Button(tk,text="Save",command = save_button_clicked).place(x=200,y=60,width=200,height=30)

【讨论】:

    猜你喜欢
    • 2023-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    相关资源
    最近更新 更多