2015-09-06 116 views
1

我的目标是发送消息到服务器,而我按输入。 下面我发布的解决方案,每次按键时按下,并不重要它是哪个键。我怎样才能得到acctualy被按下的钥匙?在QLineEdit中处理的按键哪个实例在QMainWindow中

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() 

回答

0

假设你正在使用auto-connection,你可以简单地改变你的插槽的名称是:

def on_message_box_returnPressed(self): 
     ... 

这使用returnPressed信号,而是一个稍微好一点的选择是使用editingFinished信号:

def on_message_box_editingFinished(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) 
+0

正如我看到我在标题中犯了错误,实际上message_box的类型是QPlainTextEdit,它没有returnPressed或editingFinished信号。你明确的解决方案是正确的,以及自动连接,所以我将你的答案标记为问题的正确答案。如果你能为QPlainTextEdit提供解决方案,那将会很好。 – Janusz

+0

@Janusz。 'QPlainTextEdit'是一个**多行**编辑器,因此使用回车键发送消息使事情变得更加复杂。你确定你想这样做吗?为什么不只有一个发送消息的按钮?你也可以添加一个键盘快捷键到这个按钮,这可以在Qt Designer中很容易地完成。或者如果你真的不想要按钮,你可以添加键盘快捷键,这不需要太多的代码。 – ekhumoro