2024-06-07 05:27:43 发布
网友
我的pyqt5gui中有3个qpushbutton。当通过tab键选择不同的qpushbutton时,我想触发不同的方法。 这意味着当我按一次tab键(然后下一个qpushbutton(比如qpushbutton2)被聚焦)时,我想运行一个特定于qpushbutton2的函数。 有人能帮我想办法吗?你知道吗
我们的想法是捕捉事件的焦点,因此至少有可能的方法:
<强>1。覆盖QPushButton的focusInEvent方法
from PyQt5 import QtCore, QtWidgets class PushButton(QtWidgets.QPushButton): focusSignal = QtCore.pyqtSignal() def focusInEvent(self, event): self.focusSignal.emit() super(PushButton, self).focusInEvent(event) class Widget(QtWidgets.QWidget): def __init__(self, parent=None): super(Widget, self).__init__(parent) button1 = PushButton("button1") button2 = PushButton("button2") button3 = PushButton("button3") lay = QtWidgets.QVBoxLayout(self) for button in (button1, button2, button3): lay.addWidget(button) button1.focusSignal.connect(self.focus_button1) button2.focusSignal.connect(self.focus_button2) button3.focusSignal.connect(self.focus_button3) @QtCore.pyqtSlot() def focus_button1(self): print("button1") @QtCore.pyqtSlot() def focus_button2(self): print("button2") @QtCore.pyqtSlot() def focus_button3(self): print("button3") if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) w = Widget() w.show() sys.exit(app.exec_())
<强>2。使用事件过滤器
from PyQt5 import QtCore, QtWidgets class Widget(QtWidgets.QWidget): def __init__(self, parent=None): super(Widget, self).__init__(parent) self.button1 = QtWidgets.QPushButton("button1") self.button2 = QtWidgets.QPushButton("button2") self.button3 = QtWidgets.QPushButton("button3") lay = QtWidgets.QVBoxLayout(self) for button in (self.button1, self.button2, self.button3): lay.addWidget(button) button.installEventFilter(self) def eventFilter(self, obj, event): if event.type() == QtCore.QEvent.FocusIn: if self.button1 is obj: self.focus_button1() elif self.button2 is obj: self.focus_button2() elif self.button3 is obj: self.focus_button3() return super(Widget, self).eventFilter(obj, event) def focus_button1(self): print("button1") def focus_button2(self): print("button2") def focus_button3(self): print("button3") if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) w = Widget() w.show() sys.exit(app.exec_())
3岁。QApplication调焦信号
from PyQt5 import QtCore, QtWidgets class Widget(QtWidgets.QWidget): def __init__(self, parent=None): super(Widget, self).__init__(parent) self.button1 = QtWidgets.QPushButton("button1") self.button2 = QtWidgets.QPushButton("button2") self.button3 = QtWidgets.QPushButton("button3") lay = QtWidgets.QVBoxLayout(self) for button in (self.button1, self.button2, self.button3): lay.addWidget(button) QtWidgets.qApp.focusChanged.connect(self.on_focusChanged) @QtCore.pyqtSlot("QWidget*", "QWidget*") def on_focusChanged(self, old, now): if now == self.button1: self.focus_button1() elif now == self.button2: self.focus_button2() elif now == self.button3: self.focus_button3() def focus_button1(self): print("button1") def focus_button2(self): print("button2") def focus_button3(self): print("button3") if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) w = Widget() w.show() sys.exit(app.exec_())
我们的想法是捕捉事件的焦点,因此至少有可能的方法:
<强>1。覆盖QPushButton的focusInEvent方法
<强>2。使用事件过滤器
3岁。QApplication调焦信号
相关问题 更多 >
编程相关推荐