【发布时间】:2014-03-02 10:31:27
【问题描述】:
根据条件,我想将按钮连接/重新连接到不同的功能。
假设我有一个按钮:
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
【问题讨论】:
-
引发了什么异常?有点怪。请注意,myButton.disconnect() 与 myButton.clicked.disconnect() 不同,您实际上指的是哪个?
-
@Schollii。它引发了
TypeError。这个例外一点也不奇怪:事实上,这是非常可取的。之所以引入它,是因为老式的连接和断开信号的方法会默默地失败,这可以隐藏很多潜在的错误。简而言之,以更 Pythonic 的方式引发异常。 -
感谢您的解释。我只是不明白为什么应该断开所有信号的函数应该将“当前没有连接”视为异常行为。 OTOH,如果您尝试断开连接(someSignal)并且该信号不存在,那么我可以将其视为应标记的异常情况。但是无论如何,它既不在这里也不在那里,谢谢您的信息。
标签: python pyqt click signals-slots disconnect