2014-09-05 114 views
-3

我在这段代码中遇到错误: 错误发生在我的函数settings()中的Button()命令中。但我没有任何计划如何解决它,对不起。我不能把3个命令在外部功能,因为它不会得到变量...Python:按钮命令+'&'

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() 

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

+2

有什么具体问题?你是否收到错误消息或堆栈跟踪?你期望发生什么?发生了什么呢? – Chris 2014-09-05 17:05:01

+2

另外,你的格式是* horrendous *。这段代码是不可读的。看看Python的官方风格指南[PEP 8](http://legacy.python.org/dev/peps/pep-0008/)。 – Chris 2014-09-05 17:06:26

+0

我收到了一条错误消息。我想在一个按钮命令中更改海龟的Shape,Shapesize和Pensize。 pensize不会改变,并且出现错误消息:“TypeError:不支持的操作数类型为&:'NoneType'和'NoneType'” – ProgrammingDonkey 2014-09-05 17:06:54

回答

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) 

I can't put the 3 commands in an external function, cause it wouldn't get the variables

通常情况下,这是事实。但是如果你在里定义了第二个函数,那么它的所有变量仍然是可见的。

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) 
+0

非常感谢你; ) – ProgrammingDonkey 2014-09-05 17:22:21