PYQT 如何通过动态加载UI的方式实现窗口无边框可移动?

想要使用PYQT 动态加载ui的方式,实现无窗口移动界面。我参考网上的案例,都是通过继承的方式修改。本人初学Python,x请帮助,以下是我自己写的程序,请帮忙改正。

class Main_window(QMainWindow):
_startPos = None
_endPos = None
_isTracking = False

def __init__(self):
    super().__init__()
    # 从文件中加载UI定义
    self.ui = uic.loadUi("plc_backup_tool.ui")
    # 参数文件地址
    self.msg = '请输入参数文件地址!'
    self.ui.parameter_file_address.setText(self.msg)
    # 开始备份按钮disable
    self.ui.start_backup.setEnabled(False)
    # 定时刷新检查文件参数内容地址不为空!
    self.time1 = QTimer()
    self.time1.start(100)
    self.time1.timeout.connect(self.button_enable)

def mouseMoveEvent(self, e: QMouseEvent):  # 重写移动事件
    self._endPos = e.pos() - self._startPos
    self.move(self.pos() + self._endPos)

def mousePressEvent(self, e: QMouseEvent):
    if e.button() == Qt.LeftButton:
        self._isTracking = True
        self._startPos = QPoint(e.x(), e.y())

def mouseReleaseEvent(self, e: QMouseEvent):
    if e.button() == Qt.LeftButton:
        self._isTracking = False
        self._startPos = None
        self._endPos = None

def button_enable(self):
    """定时刷新界面检查参数文件地址 有无内容,有内容了才显示备份按钮"""
    if self.ui.parameter_file_address.text() != "" and self.ui.parameter_file_address.text() != self.msg:
        self.ui.start_backup.setEnabled(True)
        self.time1.stop()

if name == "main":
# 固定的,PyQt5程序都需要QApplication对象。sys.argv是命令行参数列表,确保程序可以双击运行
app = QApplication(sys.argv)
app.setStyle("Fusion")
# 初始化
myWin = Main_window()
# 只显示最小化按钮
# myWin.ui.setWindowFlags(Qt.WindowMinimizeButtonHint)
# 窗口无边框化
myWin.ui.setWindowFlags(Qt.FramelessWindowHint)
# 窗口有边框无最小最大按钮
# myWin.ui.setWindowFlags(Qt.CustomizeWindowHint)
myWin.ui.show()
# 程序运行,sys.exit死循环监控屏幕。
sys.exit(app.exec_())

请各位大佬不吝赐教,我会追加酬金!

没懂你的意思,你是要无边框的同时可以拖动吗?如果只是需要实现拖到功能,那么只需要写个事件,比如鼠标移动时判断鼠标左键是否是点击状态,如果是点击状态(点击时记录坐标),获取移动坐标,然后改变窗口在桌面的相对位置就行了(有相关api可以修改位置)