描述:如果窗体已打开,实现窗口显示到最前端并抖动。
具体代码实现如下,可根据使用场景适当修改:
import os
import random
import sys
import time
from PyQt5.Qt import *
PORT = 63333
class MoveThread(QThread):
MoveValue = pyqtSignal(QPoint)
def __init__(self, source_pos, parent):
super(MoveThread, self).__init__(parent)
self.source_pos = source_pos
def run(self):
for a in range(5):
self.MoveValue.emit(self.source_pos + QPoint(random.randint(1, 5),
random.randint(1, 5)))
time.sleep(0.05)
class MyTcpSocket(QObject):
readyRead = pyqtSignal(QTcpSocket)
def __init__(self, parent=None):
super().__init__(parent)
self.mSoc = None
def set_socket(self, socket: QTcpSocket):
self.mSoc = socket
self.mSoc.readyRead.connect(self.to_tell_read)
def to_tell_read(self):
print("MyTcpSocket->to_tell_read")
self.readyRead.emit(self.mSoc)
class Widget(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.resize(900, 600)
try:
import socket
Clisock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Clisock.connect(("127.0.0.1", PORT))
Clisock.send('started'.encode())
Clisock.close()
os._exit(0)
except:
try:
self.tcpServer = QTcpServer(self)
# 绑定60009
# 成功返回True
# 失败返回False
self.tcpServer.listen(QHostAddress.Any, PORT)
self.tcpServer.newConnection.connect(self.newConnect)
except Exception as e:
print(e)
self.move_thread = MoveThread(None, self)
self.move_thread.MoveValue.connect(self.move)
def newConnect(self):
print("创建tcp连接")
self.psocket = MyTcpSocket(self)
self.psocket.set_socket(self.tcpServer.nextPendingConnection())
self.psocket.readyRead.connect(self.recv)
def recv(self, socket: QTcpSocket):
# 1、//接收数据
msg: QByteArray = socket.readAll()
print("服务端接收到消息:", msg)
if msg.contains(b"started"):
self.move_thread.source_pos = self.pos()
self.move_thread.start()
print(self.isActiveWindow())
if not self.isActiveWindow():
self.setWindowState(Qt.WindowActive)
self.setWindowFlags(Qt.WindowStaysOnTopHint)
self.raise_()
self.show()
self.activateWindow()
print(self.isActiveWindow(), self.pos())
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Widget()
w.setWindowTitle("测试代码")
w.setWindowFlags(Qt.WindowStaysOnTopHint)
w.show()
sys.exit(app.exec_())