为什么调用函数时数字没有增加?

时间:2018-07-01 01:45:28

标签: python function button numbers int

在python脚本中,我希望每次单击按钮时计数器都增加。在我当前的代码中,当您单击按钮时,数字不会增加。我在做什么错了?

import direct.directbase.DirectStart
from direct.gui.OnscreenText import OnscreenText
from direct.gui.DirectGui import *

from panda3d.core import TextNode
clickCount = 0

bk_text = "Times Clicked: " + str(clickCount)
textObject = OnscreenText(text = bk_text, pos = (0.95, -0.95),
                          scale = 0.07, fg = (1,0.5,0.5,1), 
align=TextNode.ACenter, mayChange = 1)



def setText(clickCount):

    addClickCount(clickCount)
    bk_text = "Times Clicked: " + str(clickCount)
    textObject.setText(bk_text)

def addClickCount(clickCount):
    clickCount += 1
    return clickCount

b = DirectButton(text = ("button"), scale=.05, command=setText(clickCount))

run()

3 个答案:

答案 0 :(得分:0)

根据@wwii评论,尝试以下操作:

def setText(clickCount):

newClickCount = addClickCount(clickCount)
bk_text = "Times Clicked: " + str(newClickCount)
textObject.setText(bk_text)

答案 1 :(得分:0)

由于clickCount是全局变量,所以呢:

import direct.directbase.DirectStart
from direct.gui.OnscreenText import OnscreenText
from direct.gui.DirectGui import *
from panda3d.core import TextNode

clickCount = 0

textObject = OnscreenText(text = bk_text, pos = (0.95, -0.95),
                          scale = 0.07, fg = (1,0.5,0.5,1), 
align=TextNode.ACenter, mayChange = 1)

def setText():
    count = addClickCount()
    bk_text = "Times Clicked: " + str(count)
    textObject.setText(bk_text)

def addClickCount():
    global clickCount 
    clickCount += 1
    return clickCount

b = DirectButton(text = ("button"), scale=.05, command=setText())

run()

答案 2 :(得分:0)

在Python中,int对象是不可变的。这意味着您永远不能就地修改一个,只能重新绑定一个引用一个整数的变量,而不是引用另一个整数。

但是,通常您不能从函数内部重新绑定全局变量。您所做的任何赋值都会创建一个局部变量,而不是重新绑定现有的全局变量(并且您无法读取旧的全局变量,然后在以后绑定具有相同名称的局部变量,如果整个函数的名称范围是局部的,则您曾经绑定过一个值)。

但是,Python提供了global语句来更改默认范围行为。如果您说global clickCount,则变量clickCount将引用函数中所有位置的全局变量。

因此,对您的代码的显而易见的解决方法是,首先删除从函数中传递的参数(这些函数从未做过任何有用的事情),而是使用global语句:

def setText():
    addClickCount()
    bk_text = "Times Clicked: " + str(clickCount)
    textObject.setText(bk_text)

def addClickCount():
    global clickCount
    clickCount += 1

b = DirectButton(text = ("button"), scale=.05, command=setText)

addClickCount函数目前太短了,除非您希望能够单独调用它,否则您可以考虑将其合并到setText中。