如何实现app通信端口 [英] How to implement app communication port

查看:119
本文介绍了如何实现app通信端口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

将下面的代码保存为 application.py 允许我运行一个进程,该进程在启动时显示一个简单的 QDialog 和一个 QLabel:

Saving the code below as application.py allows me to run a process that when started shows a simple QDialog with a QLabel:

python application.py

在进程运行并显示对话框时,我想将默认标题彩虹上的某处"更改为其他内容.如何实现?

While the process is running and dialog shown I would like to change the default title "somewhere over the rainbow" to something else. How to achieve it?

from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
app = QApplication([])

class Dialog(QDialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)
        self.setLayout(QVBoxLayout())
        self.label = QLabel('somewhere over the rainbow')
        self.layout().addWidget(self.label)
        self.show()

dialog = Dialog()
app.exec_()

下面是一个 QLabel 的文本设置为一个新的字符串值01011001001001110100100110"的例子:

edited:

Below is an example of QLabel's text set to a new string value "01011001001001110100100110":

推荐答案

以下是围绕 SocketServerTPCServerBaseRequestHandler 设计的工作解决方案> 课程.

Below is a working solution designed around SocketServer's TPCServer and BaseRequestHandler Classes.

这个实现使用了 QThread 类.

This implementation utilizes QThread Class.

application.py

import SocketServer

from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

IP, PORT = '127.0.0.1', 62236

app = QApplication([])


class Emitter(QObject):
    signal = pyqtSignal(str)


class Handler(SocketServer.BaseRequestHandler):
    emitter = Emitter()

    def handle(self):
        self.emitter.signal.emit(self.request.recv(1024))


class Thread(QThread):
    def __init__(self, target, parent=None):
        QThread.__init__(self, parent)
        self.target = target

    def run(self):
        while True:
            self.target()


class Dialog(QDialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)

        Handler.emitter.signal.connect(self.onEmit)
        self.server = SocketServer.TCPServer((IP, PORT), Handler)

        thread = Thread(target=self.server.handle_request)
        thread.start()

        self.setLayout(QVBoxLayout())
        self.label = QLabel('somewhere over the rainbow')
        self.layout().addWidget(self.label)
        self.show()

    def closeEvent(self, event):
        self.server.server_close()
        event.accept()

    def onEmit(self, arg):
        self.label.setText(str(arg))


dialog = Dialog()
app.exec_()

client.py

import socket

IP, PORT = '127.0.0.1', 62236

def send(data):
    SOCKET = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    SOCKET.connect((IP, PORT))
    SOCKET.send(data)
    SOCKET.close()

for i in range(2, 1000):
    send('data %07d'%i)

send(raw_input("input:\t"))

使用 threading.Thread 使用 SocketServer.TCPServer.serve_forever 方法代替 SocketServer.TCPServer.handle_request:

With threading.Thread use SocketServer.TCPServer.serve_forever method instead of SocketServer.TCPServer.handle_request:

    import threading
    thread = threading.Thread(target=self.server.serve_forever)
    thread.start()

这篇关于如何实现app通信端口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆