from PyQt5QtWidgets import QWidgetQApplicationfrom PyQt5QtCore import QtQPointimport sysclass MovableWindowQWidget def __init__self args kwargs super__init__args kwargs selfsetWindowF
只需要将MovableWindow的基类改为QDialog即可:
from PyQt5.QtWidgets import QDialog,QApplication
from PyQt5.QtCore import Qt,QPoint
import sys
class MovableWindow(QDialog):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowFlags(Qt.FramelessWindowHint) # 隐藏窗口标题栏
self.dragPos = QPoint(0, 0) # 记录鼠标位置
def mousePressEvent(self, event):
self.dragPos = event.globalPos() - self.frameGeometry().topLeft() # 获取鼠标位置
def mouseMoveEvent(self, event):
if event.buttons() == Qt.LeftButton:
self.move(event.globalPos() - self.dragPos) # 移动窗口
def resizeEvent(self, event):
super().resizeEvent(event)
self.setMinimumSize(100, 100) # 设置最小尺寸
def mouseDoubleClickEvent(self, event):
if self.isMaximized():
self.showNormal() # 还原窗口
else:
self.showMaximized() # 最大化窗口
if __name__ == '__main__':
app = QApplication(sys.argv)
window = QDialog()
window.resize(400, 300)
movable_window = MovableWindow(parent=window)
movable_window.resize(200, 150)
movable_window.show()
window.show()
sys.exit(app.exec_())
在任意窗口调用MovableWindow实现移动当前窗口,只需要将MovableWindow作为当前窗口的子窗口即可。在上述代码中,我们创建了一个QDialog窗口window,然后将MovableWindow作为其子窗口,再显示两个窗口即可
原文地址: https://www.cveoy.top/t/topic/ewVk 著作权归作者所有。请勿转载和采集!