Python 在QLineEdit中按的处理键QMainWindow中有哪个实例

Python 在QLineEdit中按的处理键QMainWindow中有哪个实例,python,qt,pyqt5,Python,Qt,Pyqt5,我的目标是在按下Enter键的同时向服务器发送消息。 下面我发布了一个解决方案,它可以在每次按键时工作,而不管是哪个键。我怎样才能得到意外按下的键 from sys import argv, exit from interface import Ui_MainWindow from PyQt5.QtGui import QKeyEvent from PyQt5.QtCore import Qt, pyqtSlot from PyQt5.QtWidgets import QApplication

我的目标是在按下Enter键的同时向服务器发送消息。 下面我发布了一个解决方案,它可以在每次按键时工作,而不管是哪个键。我怎样才能得到意外按下的键

from sys import argv, exit

from interface import Ui_MainWindow
from PyQt5.QtGui import QKeyEvent
from PyQt5.QtCore import Qt, pyqtSlot
from PyQt5.QtWidgets import QApplication, QMainWindow
from client import connect_to_server, send_message


class Communicator(QMainWindow):
    def __init__(self):
        super(QMainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

    @pyqtSlot()
    def on_message_box_textChanged(self):
        server_socket = connect_to_server()
        message = self.ui.message_box.toPlainText()
        send_message(message, server_socket)


def main():
    main_application = QApplication(argv)
    window = Communicator()
    window.show()
    exit(main_application.exec_())

if __name__ == '__main__':
    main()

假设您正在使用,只需将插槽名称更改为:

    def on_message_box_returnPressed(self):
        ...
这将使用信号,但更好的选择可能是使用信号:

使用显式信号连接,您的代码如下所示:

class Communicator(QMainWindow):
    def __init__(self):
        super(QMainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.message_box.editingFinished.connect(self.sendMessage)

    def sendMessage(self):
        server_socket = connect_to_server()
        message = self.ui.message_box.toPlainText()
        send_message(message, server_socket)

假设您正在使用,只需将插槽名称更改为:

    def on_message_box_returnPressed(self):
        ...
这将使用信号,但更好的选择可能是使用信号:

使用显式信号连接,您的代码如下所示:

class Communicator(QMainWindow):
    def __init__(self):
        super(QMainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.message_box.editingFinished.connect(self.sendMessage)

    def sendMessage(self):
        server_socket = connect_to_server()
        message = self.ui.message_box.toPlainText()
        send_message(message, server_socket)

正如我看到的,我在标题中犯了一个错误,事实上,消息框的类型是QPlainTextEdit,它没有returnPressed或editingFinished信号。您的显式解决方案和自动连接解决方案都是正确的,所以我将您的答案标记为问题的正确答案。如果您能为QPlainTextEdit提供解决方案,那就太好了。@Janusz。
QPlainTextEdit
是一个多行编辑器,因此使用enter键发送消息会使事情变得更加复杂。你确定要这样做吗?为什么不干脆用一个按钮来发送信息呢?您还可以向按钮添加键盘快捷键,这一切都可以在Qt Designer中轻松完成。或者,如果你真的不想要按钮,你可以只添加键盘快捷键,这不需要太多代码。正如我看到的,我在标题中犯了错误,事实上,消息框的类型是QplaintExtendit,它没有returnPressed或editingFinished信号。您的显式解决方案和自动连接解决方案都是正确的,所以我将您的答案标记为问题的正确答案。如果您能为QPlainTextEdit提供解决方案,那就太好了。@Janusz。
QPlainTextEdit
是一个多行编辑器,因此使用enter键发送消息会使事情变得更加复杂。你确定要这样做吗?为什么不干脆用一个按钮来发送信息呢?您还可以向按钮添加键盘快捷键,这一切都可以在Qt Designer中轻松完成。或者,如果你真的不想要这个按钮,你可以只添加键盘快捷键,而不需要太多代码。