Lv.的博客

PyQt5 窗口操作

复制代码
################################
# PyQt5中文网 - PyQt5全套视频教程 #
#    https://www.PyQt5.cn/     #
#         主讲: 村长            #
################################

from PyQt5.Qt import *
import sys


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("窗口")
        self.setWindowOpacity(0.9)
        self.resize(600, 500)
        self.btn_x = 50
        self.btn_y = 30
        self.func_list()

    def func_list(self):
        self.btn()

    def btn(self):
        self.close_btn = QPushButton(self)
        self.close_btn.setText('关闭')
        self.close_btn.resize(self.btn_x, self.btn_y)

        self.max_btn = QPushButton(self)
        self.max_btn.setText('最大化')
        self.max_btn.resize(self.btn_x, self.btn_y)

        self.min_btn = QPushButton(self)
        self.min_btn.setText('最小化')
        self.min_btn.resize(self.btn_x, self.btn_y)

        def max_signal():
            if self.isMaximized():
                self.showNormal()
                self.max_btn.setText('最大化')
            else:
                self.showMaximized()
                self.max_btn.setText('恢复')

        self.max_btn.pressed.connect(max_signal)
        self.close_btn.pressed.connect(self.close)
        self.min_btn.pressed.connect(self.showMinimized)

    def resizeEvent(self, QResizeEvent):
        self.close_btn.move(self.width() - self.btn_x, 2)
        self.max_btn.move(self.width() - self.btn_x * 2, 2)
        self.min_btn.move(self.width() - self.btn_x * 3, 2)

    def mousePressEvent(self, QMouseEvent):
        if QMouseEvent.button() == Qt.LeftButton:
            self.mouse_press = True  # 需要在属性中先定义为False
            self.win_x = self.x()  # 窗口位置
            self.win_y = self.y()
            self.m_x = QMouseEvent.globalX()  # 全局位置
            self.m_y = QMouseEvent.globalY()
            # 1.创建一个标记,用来判定鼠标只有在按下之后才能移动
            # 2.窗口的原始坐标
            # 3.鼠标按下的坐标

    def mouseMoveEvent(self, QMouseEvent):
        if self.mouse_press:
            move_x = QMouseEvent.globalX()
            move_y = QMouseEvent.globalY()
            xx = move_x - self.m_x
            yy = move_y - self.m_y
            self.move(self.win_x + xx, self.win_y + yy)
        # if 窗口标记 == True:
        # 2.根据鼠标按下的点计算移动量
        # 3.根据移动量和窗口的原始坐标得到新坐标
        # 4.移动串口位置

    def mouseReleaseEvent(self, QMouseEvent):
        self.mouse_press = False
        # 1.把mousePressEvent中创建的标记重置为False


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()

    window.show()
    sys.exit(app.exec_())
复制代码

 

posted @   Avatarx  阅读(71)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2016-05-31 SQL server插入数据后,获取自增长字段的值
2016-05-31 sqlserver 创建用户 sp_addlogin
2016-05-31 存储过程嵌套模板
2014-05-31 linux安装qwt插件linux
2014-05-31 qt超强绘图控件qwt - 安装及配置
2014-05-31 WIN7 下 Qt Creator 安装 QWT
点击右上角即可分享
微信分享提示