Android 防止on_活动回调中的活动状态更改 我的目标
在我的Android版Kivy应用程序中,我有一个开关小部件,当它打开时可以创建蓝牙套接字连接。关闭时,它将关闭插座。使用on_active选项执行回调 其思想是,当打开时,回调将检查连接是否已建立。如果是,则开关会更改其值。如果否,将出现一个弹出窗口,开关返回到“active=False”值 我的问题是,当蓝牙连接未建立时,我无法阻止交换机小部件更改为“Active=True” 问题:是否可以防止在“on_Active”回调中更改“Active”状态 我查阅了文档和互联网上的许多其他示例,但没有成功。我是kivy/python的新手,非常感谢您的帮助 已经试过了Android 防止on_活动回调中的活动状态更改 我的目标,android,python,switch-statement,widget,kivy,Android,Python,Switch Statement,Widget,Kivy,在我的Android版Kivy应用程序中,我有一个开关小部件,当它打开时可以创建蓝牙套接字连接。关闭时,它将关闭插座。使用on_active选项执行回调 其思想是,当打开时,回调将检查连接是否已建立。如果是,则开关会更改其值。如果否,将出现一个弹出窗口,开关返回到“active=False”值 我的问题是,当蓝牙连接未建立时,我无法阻止交换机小部件更改为“Active=True” 问题:是否可以防止在“on_Active”回调中更改“Active”状态 我查阅了文档和互联网上的许多其他示例,但没
<ClassName>:
BoxLayout:
Switch:
on_active: app.setBluetoothConnection(self.active)
active: app.activeBluetooth
总结
我认为必须有一个非常简单的解决方案来解决这个问题,而不需要改变代码的很多部分
非常感谢您的任何帮助或建议
问题的最新情况
多亏了@johnanderson的建议/提示,我已经弄明白是什么让我的程序崩溃了。以下是该问题的解决方案,但仍然不是一个非常优雅的解决方案:
-问题:在活动回调中定义activeSwitch.active=False
时,程序再次调用回调。由于蓝牙连接的套接字变量在没有连接时不存在,所以我调用了一个不存在的变量
解决方案
kv文件
<ClassName>:
BoxLayout:
Switch:
on_active: app.setBluetoothConnection(self)
active: False
下面的代码是解决此问题的一种方法,但它不是最优的,因为当if activeSwitch.active==True
和输入时,回调被调用两次
如果有人能想出一个更优雅的解决方案,那就太好了。我刚刚意识到我认为是你的问题。setBluetoothConnection()
中的else
语句作为try的一部分,else
块除外。我认为您打算将else
与if
匹配。因此,您需要取消对else
块的登入。将开关
实例传递给setBluetoothConnection()
而不仅仅是活动
值将简化代码:
kv
:
<ClassName>:
BoxLayout:
Switch:
# pass the Switch instance to the setBluetoothConnection() method
on_active: app.setBluetoothConnection(self)
active: False
我刚意识到我认为是你的问题。setBluetoothConnection()
中的else
语句作为try的一部分,else
块除外。我认为您打算将else
与if
匹配。因此,您需要取消对else
块的登入。将开关
实例传递给setBluetoothConnection()
而不仅仅是活动
值将简化代码:
kv
:
<ClassName>:
BoxLayout:
Switch:
# pass the Switch instance to the setBluetoothConnection() method
on_active: app.setBluetoothConnection(self)
active: False
activeBluetooth
属性在您的App
类中的用途是什么?除非您采取措施进行更改,否则开关的状态不会更改。它不会自动切换回“真”“.Hi@John Anderson:activeBluetooth
只是一个试验的一部分,以防止交换机在蓝牙连接未建立时更改值。我可以摆脱它。2点:这个想法是为了防止在未建立蓝牙连接时将活动状态更改为活动状态。也就是说,开关返回到active=False,以防止活动回调中的状态更改。(很抱歉格式化,我一直在玩,无法再次编辑评论)您在kv
文件active:app.activeBluetooth
中的行设置了Switch
的active
属性和MainLoop
的activeBluetooth
属性之间的绑定。该绑定将调整开关的active
属性,使其与activeBluetooth
属性一致。我认为最好不要使用该属性和绑定。您的应用程序类中的activeBluetooth
属性的用途是什么?除非您采取措施进行更改,否则开关的状态不会更改。它不会自动切换回“真”“.Hi@John Anderson:activeBluetooth
只是一个试验的一部分,以防止交换机在蓝牙连接未建立时更改值。我可以摆脱它。2点:这个想法是为了防止在未建立蓝牙连接时将活动状态更改为活动状态。也就是说,开关返回到active=False,以防止活动回调中的状态更改。(很抱歉格式化,我一直在玩,无法再次编辑评论)您在kv
<ClassName>:
BoxLayout:
Switch:
# pass the Switch instance to the setBluetoothConnection() method
on_active: app.setBluetoothConnection(self)
active: False
class MainLoop(App):
#Here comes build with other Widget building and callbacks
def setBluetoothConnection(self,switch_instance):
if switch_instance.active == True:
try:
#Check whether we can connect and stablish connection
except:
#Error-Popup
popup = Popup(content=content, title='Connection,error',size_hint=(None, None), size=(300, 300))
popup.open()
#What can I define here to prevent the active status change of the switch?#
# note the indentation matches the above `if` statement
else:
#Close the socket connection and other stuff
switch_instance.active = False