PyQt Widget connect()和disconnect()

发布于 2021-01-29 15:06:34

根据情况,我想将按钮连接/重新连接到其他功能。

假设我有一个按钮:

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
关注者
0
被浏览
97
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如果您需要在许多地方重新连接信号,则可以定义一个通用工具功能,如下所示:

    def reconnect(signal, newhandler=None, oldhandler=None):
        while True:
            try:
                if oldhandler is not None:
                    signal.disconnect(oldhandler)
                else:
                    signal.disconnect()
            except TypeError:
                break
        if newhandler is not None:
            signal.connect(newhandler)
    
    ...
    
    if connected:
        reconnect(myButton.clicked, function_A)
    else:
        reconnect(myButton.clicked, function_B)
    

    (注意:该循环是安全断开特定处理程序所必需的,因为它可能已经连接了很多次,并且一次disconnect只能删除一个连接。)



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看