用连续函数传递变量?

时间:2016-08-25 22:27:52

标签: python python-3.x tkinter

我正在使用一个函数从操纵杆读取模拟值并更新tkinter屏幕上的标签。这很好但我也希望在函数外部使用该值来执行带有其他返回值的if语句。以下是我到目前为止的情况:

joystickVal = joystick()

返回后,我使用:

将其分配给变量
{{1}}

但它只返回一次值而不是像我希望的那样持续。我在这里做错了吗?

2 个答案:

答案 0 :(得分:1)

到目前为止,最简单的解决方案是简单地将joystickValue设为全局变量。

def joystick():
    global joystickValue
    ...
    joystickValue = joystickRead
    ...

一般来说,应该避免全局变量。然而,在事件驱动的程序中,它们是必需的。最好为你的应用程序使用类,但在这种情况下,似乎你不是这样的全局变量是不可避免的。

在您的代码中,实际上 每次调用时都会返回值。只是它将值返回mainloop而不是第一次将其调用的任何函数。这是因为您使用after将呼叫推迟到将来的日期。将来进行该调用的代码不是您的代码,而是mainloop

答案 1 :(得分:-1)

如果真的需要这样的架构,你可以这样做:

.GregorianCalendar

但你最好避免使用这种模式,因为它会带来强烈的耦合。通常,功能应尽可能独立

在ThreadDispatcher here

中查看它是如何正确完成的

UPD:(部分回复您的评论) 用于模拟readadc:

def joystick(adc):
    global joystickVal
    joystickVal = readadc(adc, SPICLK, SPIMOSI, SPIMISO, SPICS)
    joy_val.config(text=joystickVal)
    joy_val.after(1000, joystick, adc)

joystick(joystick_adc)  # to start
# Also this wouldn't stop, so you'd better coding it in class with shared
# attribute, used to indicate condition