想要使用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可以修改位置)