【发布时间】:2018-01-20 05:39:55
【问题描述】:
我在我的代码中使用典型的子类对 qtextedit 进行了子类化,但不知何故,即使我的信号工作正常,event.ignore 也不会工作。目标是抓住输入键并单击按钮,但不提交 qtextedit 上的输入。
我的代码在这里:
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QAction
from PyQt5.QtGui import QPalette
from PyQt5.QtCore import QThread , pyqtSignal
class Text_Edit(QtWidgets.QTextEdit):
keyPressed = QtCore.pyqtSignal(QtCore.QEvent)
keyPressed2 = pyqtSignal()
def __init__(self, parent=None):
super(Text_Edit, self).__init__(parent)
self.setGeometry(QtCore.QRect(30, 100, 331, 71))
self.setStyleSheet("font: 10pt \"MS Shell Dlg 2\";")
self.raise_()
self.setFocus()
self.setPlaceholderText("Set 4 character ICAO Locator here , divided by spaces...")
self.keyPressed.connect(self.on_key)
def keyPressEvent(self,event):
super(Text_Edit, self).keyPressEvent(event)
self.keyPressed.emit(event)
def on_key(self, event):
if event.key() == QtCore.Qt.Key_Return or event.key() == QtCore.Qt.Key_Enter:
event.ignore()
self.keyPressed2.emit()
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1371, 924)
MainWindow.setAcceptDrops(True)
self.T_aerodromes_input = Text_Edit(self.centralWidget)
self.T_aerodromes_input.keyPressed2.connect(self.B_aerodrome_data.click)
self.B_aerodrome_data = QtWidgets.QPushButton(self.centralWidget)
self.B_aerodrome_data.setGeometry(QtCore.QRect(670, 100, 271, 41))
self.B_aerodrome_data.setObjectName("B_aerodrome_data")
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
【问题讨论】:
-
你想让QKeyEvent事件不触发清理QTextEdit占位符的任务,而是激活按下按钮的效果吗?
-
如果要回车不进入QTextEdit去掉
super(Text_Edit, self).keyPressEvent(event) -
现在所有键都被禁用了..,但是输入工作正常
-
看我的回答..
-
您可能想查看doc.qt.io/qt-5/qobject.html#installEventFilter 以了解另一种(更通用)实现您想要的行为的方式