我试图这样做,所以每次点击按钮我都可以运行不同的东西。
Counter = 0
def B_C(Counter):
Counter = Counter + 1
if counter == 1:
print("1")
elif counter == 2:
print("2")
else:
if counter == 3:
Print("3")
但是我得到了
TypeError: B_C() takes exactly 1 positional argument (0 given)
答案 0 :(得分:3)
试试这个:
counter = 0
def B_C():
global counter
counter += 1
if counter == 1:
print("1")
elif counter == 2:
print("2")
else:
if counter == 3:
print("3")
B_C()
B_C()
B_C()
输出:
1
2
3
第一件事:python区分大小写,因此Counter不等于counter。在函数中,您可以使用global counter
,因此您无需将计数器传递给按钮单击。
答案 1 :(得分:2)
不要使用全局...如果你想修改一个对象python有可变对象。这些是通过引用传递的结构,该函数将改变结构内部的值。
下面是传递值的基本示例,其中函数范围之外的值不会更改。变量“c”下面是一个不可变对象,c的值不会从函数中改变。 Immutable vs Mutable types
c = 0
def foo(c):
c = c + 1
return c
m = foo(c)
print(c) # 0
print(m) # 1
这是一个可变对象的示例,并通过引用传递(我相信python总是通过引用传递,但具有可变和不可变对象)。
c = [0]
def foo(c):
c[0] = c[0] + 1
return c
m = foo(c)
print(c) # [1]
print(m) # [1]
或上课。除了全局之外的任何东西。
class MyCount(object):
def __init__(self):
self.x = 0
# end Constructor
def B_C(self):
self.x += 1
pass # do stuff
# end B_C
def __str__(self):
return str(self.x)
# end str
# end class MyCount
c = MyCount()
c.B_C()
print(c)
c.B_C()
print(c)
你还提到你正在使用一个按钮。如果您想按下按钮将参数传递给函数,则可能必须使用lambda函数。我真的不知道TKinter,但是对于PySide,你已经连接按钮来点击一个函数。可能没有简单的方法将变量传递到按钮单击功能。 http://www.tutorialspoint.com/python/tk_button.htm
def helloCallBack(txt):
tkMessageBox.showinfo("Hello Python", txt)
# from the link above
B = Tkinter.Button(top, text="Hello", command= lambda x="Hello": helloCallBack(x))
# lambda is actually a function definition.
# The lambda is like helloCallBack without the parentheses.
# This helps you pass a variable into a function without much code