Python 在QLineEdit中按的处理键QMainWindow中有哪个实例
我的目标是在按下Enter键的同时向服务器发送消息。 下面我发布了一个解决方案,它可以在每次按键时工作,而不管是哪个键。我怎样才能得到意外按下的键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
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中轻松完成。或者,如果你真的不想要这个按钮,你可以只添加键盘快捷键,而不需要太多代码。