Qt QPushButton赢得';t点火线槽(QObject方法)
我有一个QObject,它作为控制器工作。 此QObject具有对QPushButton的引用。 此QOjbect有一个方法集,该方法集将在QPushButton的clicked事件时激发 例: 在这里,你点击的按钮不会被触发。 我试着用Qt QPushButton赢得';t点火线槽(QObject方法),qt,python-2.7,qt4,pyqt,pyside,Qt,Python 2.7,Qt4,Pyqt,Pyside,我有一个QObject,它作为控制器工作。 此QObject具有对QPushButton的引用。 此QOjbect有一个方法集,该方法集将在QPushButton的clicked事件时激发 例: 在这里,你点击的按钮不会被触发。 我试着用@Slot(),@Slot(QObject),@Slot(type),@Slot(str),@Slot(int)来装饰它,但仍然不起作用 我做错了什么 如果我使用.clicked.connect(lambda:self.button\u clicked)它当然可
@Slot()
,@Slot(QObject)
,@Slot(type)
,@Slot(str)
,@Slot(int)
来装饰它,但仍然不起作用
我做错了什么
如果我使用.clicked.connect(lambda:self.button\u clicked)
它当然可以工作。所以我假设这是一个类型不匹配,但是@Slot(..)
装饰不应该修复它吗
谢谢。可能是,您可以尝试
释放
信号,而不是点击
信号,因为点击的信号是在按钮被激活时发出的(即当鼠标光标在按钮内时按下然后释放)
或者你可以尝试连接信号的方法2
class MyController(QObject):
def __init__(self, parent=None):
super(MyController, self).__init__(parent)
self.some_ref = ....
self.button = self.some_ref.button
# method 1
self.button.released.connect(self.button_clicked)
# method 2
self.connect(self.button, SIGNAL('released()'), self.button_clicked)
def button_clicked(self):
print "yipee it works..."
我不知道问题是否在于@Slot()被注释了(在开头有一个#),但这段代码对我来说是可行的(它在python 3中,但只是更改了打印行)
我尝试了老式的连接方式,包括clicked()和release()事件,但仍然不起作用。我在这里真的很困惑。谢谢你的帮助。你好!我的代码库有点复杂(很多元素),在仔细阅读您的示例后,我意识到我在移动某些类时“破坏”了QMainWindow父引用。现在它起作用了。非常感谢你!我想QObject引用是不够的。
class MyController(QObject):
def __init__(self, parent=None):
super(MyController, self).__init__(parent)
self.some_ref = ....
self.button = self.some_ref.button
# method 1
self.button.released.connect(self.button_clicked)
# method 2
self.connect(self.button, SIGNAL('released()'), self.button_clicked)
def button_clicked(self):
print "yipee it works..."
import sys
from PySide.QtGui import *
from PySide.QtCore import *
class Window(QMainWindow):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.button = QPushButton()
self.button.setText("Test")
self.setCentralWidget(self.button)
def GetButton(self):
return self.button
class MyController(QObject):
def __init__(self, parent=None):
super(MyController, self).__init__(parent)
self.button = parent.GetButton() #(returns QPushButton)
self.button.clicked.connect(self.button_clicked)
@Slot()
def button_clicked(self):
print('button clicked: ', self.sender())
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
controller = MyController(window)
window.show()
app.exec_()
sys.exit(0)