我正在使用一个函数从操纵杆读取模拟值并更新tkinter屏幕上的标签。这很好但我也希望在函数外部使用该值来执行带有其他返回值的if语句。以下是我到目前为止的情况:
joystickVal = joystick()
返回后,我使用:
将其分配给变量{{1}}
但它只返回一次值而不是像我希望的那样持续。我在这里做错了吗?
答案 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