gpt4 book ai didi

python - PyQt Widget connect() 和 disconnect()

转载 作者:太空狗 更新时间:2023-10-29 16:53:54 24 4
gpt4 key购买 nike

根据条件,我想将按钮连接/重新连接到不同的功能。

假设我有一个按钮:

myButton = QtGui.QPushButton()

对于这个例子,假设我检查是否有互联网连接。

if connected == True:
myButton.clicked.connect(function_A)

elif connected == False:
myButton.clicked.connect(function_B)

首先,在按钮被重新分配/重新连接到另一个功能(function_A 或 function_B)之前,我想断开按钮与它已经连接的任何功能的连接。其次,我已经注意到,在按钮重新连接后,需要额外点击按钮才能获得新功能。按钮重新连接到另一个功能后,它仍会尝试运行以前的功能 - 按钮较早连接到的功能(在重新连接之前)。请指教。提前致谢!

稍后编辑:

看来小部件的.disconnect() 方法可用于断开按钮与其连接的功能的连接。

myButton.disconnect()

不幸的是,如果小部件未连接到任何函数,则 .disconnect() 会抛出错误。为了解决这个问题,我使用了 Try/Except。但我宁愿使用更优雅的解决方案......

try: myButton.clicked.disconnect() 
except Exception: pass

最佳答案

如果你需要在很多地方重新连接信号,那么你可以像这样定义一个通用的效用函数:

def reconnect(signal, newhandler=None, oldhandler=None):        
try:
if oldhandler is not None:
while True:
signal.disconnect(oldhandler)
else:
signal.disconnect()
except TypeError:
pass
if newhandler is not None:
signal.connect(newhandler)

...

if connected:
reconnect(myButton.clicked, function_A)
else:
reconnect(myButton.clicked, function_B)

(注意:安全断开特定处理程序需要循环,因为它可能已连接多次,而 disconnect(slot) 一次仅删除一个连接。)。

关于python - PyQt Widget connect() 和 disconnect(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21586643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com