PyQt5教程(十二)——实现QQ登录界面(五、实现鼠标拖动界面,鼠标事件)

一、实现界面可以随着鼠标进行拖动

1、主要就是对鼠标事件的实现:

        def mousePressEvent(self, event):if event.button() == Qt.LeftButton:self.m_flag = Trueself.m_Position = event.globalPos() - self.pos()  # 获取鼠标相对窗口的位置event.accept()self.setCursor(QCursor(Qt.OpenHandCursor))  # 更改鼠标图标def mouseMoveEvent(self, QMouseEvent):if Qt.LeftButton and self.m_flag:self.move(QMouseEvent.globalPos() - self.m_Position)  # 更改窗口位置QMouseEvent.accept()def mouseReleaseEvent(self, QMouseEvent):self.m_flag = Falseself.setCursor(QCursor(Qt.ArrowCursor))

事件是由程序内部或外部产生的事情或某种动作的通称。比如用户按下键盘或鼠标,就会产生一个键盘事件或鼠标事件(这是由程序外部产生的事件);再如,当窗口第一次显示时,会产生一个绘制事件,以通知窗口需要重新绘制其自身,从而使该窗口可见(这是由程序内部产生的事件)。

2、logicQQ.py中添加鼠标事件的代码:

import sys
from PyQt5.QtWidgets import QApplication, QLabel, QPushButton, QHBoxLayout
from PyQt5.QtCore import  Qt, QSize
from QQLogin import Ui_Dialog
from PyQt5.Qt import QWidget
from PyQt5.QtGui import QIcon, QPixmap, QMovie, QCursorimport image_rcclass QSSLoad :def __init__( self):pass@staticmethoddef readQssFile(qssFileName):with open( qssFileName , 'r',  encoding='UTF-8') as file:return file.read()class MyMainWindow(QWidget, Ui_Dialog):def __init__( self, parent=None):super(MyMainWindow, self).__init__(parent)self.setupUi(self)self.initUI()def initUI(self):self.setWindowFlags(Qt.FramelessWindowHint) #去掉标题栏self.accountcomboBox.setEditable(True)lineEdit = self.accountcomboBox.lineEdit()lineEdit.setPlaceholderText("QQ号码/手机/邮箱")self.passwordEdit.setPlaceholderText("密码")self.loginStatusBtn.raise_()self.picLab.setPixmap(QPixmap(':/images/HeadImage.png'))self.loginStatusBtn.setIcon(QIcon(':/images/state_online.png'))#gif动画效果self.initBackGif()#小键盘self.initKeyBoard()#设置背景gif图def initBackGif(self):pback = QLabel(self)movie = QMovie()movie.setFileName(":/images/back.gif")movie.start()movie.stop()pback.setMovie(movie)movie.start()pback.move(0, 0)#设置小键盘   def initKeyBoard(self):keyBaordBtn = QPushButton()keyBaordBtn.setObjectName("BtnKeyBoard")keyBaordBtn.setFixedSize(QSize(16, 16))keyBaordBtn.setCursor(QCursor(Qt.PointingHandCursor))passwordEditLayout = QHBoxLayout()passwordEditLayout.addStretch()passwordEditLayout.addWidget(keyBaordBtn)passwordEditLayout.setSpacing(0)passwordEditLayout.setContentsMargins(0, 0, 8, 0)self.passwordEdit.setLayout(passwordEditLayout)self.passwordEdit.setTextMargins(0, 0, keyBaordBtn.width() + 12, 0)            def mousePressEvent(self, event):if event.button() == Qt.LeftButton:self.m_flag = Trueself.m_Position = event.globalPos() - self.pos()  # 获取鼠标相对窗口的位置event.accept()self.setCursor(QCursor(Qt.OpenHandCursor))  # 更改鼠标图标def mouseMoveEvent(self, QMouseEvent):if Qt.LeftButton and self.m_flag:self.move(QMouseEvent.globalPos() - self.m_Position)  # 更改窗口位置QMouseEvent.accept()def mouseReleaseEvent(self, QMouseEvent):self.m_flag = Falseself.setCursor(QCursor(Qt.ArrowCursor))if __name__ == "__main__":app = QApplication(sys.argv)qssFileName = "./images/login1.qss"qssFile = QSSLoad.readQssFile(qssFileName)win = MyMainWindow()win.setStyleSheet(qssFile)win.show()sys.exit(app.exec())

3、运行效果:

我们可以看到随着鼠标的拖动,界面也跟着拖动。

下一篇:PyQt5教程(十三)——实现QQ登录界面(七、信号和槽)

本文原创作者:冯一川(ifeng12358@163.com),未经作者授权同意,请勿转载。如需获取本程序源代码和资源,欢迎发邮件与我联系。

PyQt5教程(十二)——实现QQ登录界面(六、实现鼠标拖动界面,鼠标事件)相关推荐

  1. Wix 安装部署教程(十二) -- 自动更新WXS文件

    原文:Wix 安装部署教程(十二) -- 自动更新WXS文件 上一篇分享了一个QuickWIX,用来对比两个工程前后的差异,但是这样还是很繁琐,而且昨天发现有Bug,目录对比有问题.这次改变做法,完全 ...

  2. 【Visual C++】游戏开发笔记四十四 浅墨DirectX教程十二 网格模型和X文件使用面面观

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8586540 作者:毛星云(浅墨 ...

  3. 【Visual C++】游戏开发笔记四十四 浅墨DirectX教程十二 网格模型和X文件使用面面观...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/zhmxy555/article/details/8586540 作者:毛星云(浅墨) ...

  4. VML极道教程(十二) VML编程大结局

    本系列文章导航 VML极道教程(一) VML介绍 VML极道教程(二) VML入门 VML极道教程(三) 标记实战与line线 VML极道教程(四) oval圆rect矩型 VML极道教程(五) Ro ...

  5. twisted系列教程十二–为server 增加一个service

    One More Server 在第九部分和第十部分我们介绍了关于诗歌的变形引擎的想法,最后我们实现了cummingsifier,我们还让它抛出随机的异常来模拟错误.但是假如这个变形的引擎在另外一台服 ...

  6. nCode:DesignLife案例教程十二

    nCode:DesignLife 案例十二--Virtual Strain Gauge Correlation 12.1 案例文件 12.2 背景 12.3 创建流程 12.4 保存虚拟应变计 12. ...

  7. Lance老师UI系列教程第三课-QQ登录注册界面的实现(android-2012最新版)

    分类: android UI教程2012-08-06 22:37 3731人阅读 评论(6) 收藏 举报 uiandroidqqlayoutbutton UI系列教程第三课:腾讯登录注册界面的实现 今 ...

  8. Android开发系列(十二) QQ联系人列表升级版——ListView和ScrollView高阶使用方法...

    今天继续进行QQ界面的开发工作.前一段时间讲过ExpandableListView的使用并且设置了一个比较简单的具有子菜单效果的联系人列表,本节添加进ScrollView控件,对QQ2013版的联系人 ...

  9. 尚硅谷在线教育十二:微信登录

    文章目录 1.OAuth2.0 2. 微信扫描登录的准备 3. 微信登录 3.1 在service-ucenter模块配置文件 微信id,密钥和域名地址 3.2创建读取配置文件的类 3.3 生成微信扫 ...

最新文章

  1. VTK修炼之道73:交互部件_Widget应用综述
  2. “尽快成立国家级权威信息安全部门”
  3. linux自动获取ip网卡配置文件,linux 命令行下配置网卡自动获取 IP
  4. 基于事件驱动架构构建微服务第19部分:使用 SignalR 和 Azure Active Directory 构建和保护实时通信...
  5. 博士生找工作的真相!就问一声:你是否足够强大?
  6. 【MySQL】Linux 命令启动 mysql
  7. TypeError: 'str' object is not callable
  8. 通达信在linux下界面难看,通达信看盘设置小技巧,主力也在用的设置技巧
  9. 免费的查询IP归属地接口分享
  10. 3D 机器视觉应用并采用 DLP 技术的精确点云生成
  11. dlib检测人脸landmarks
  12. BugKu ——WP(MISC[二])
  13. python测试驱动开发pdf_python 测试驱动开发的简单例子
  14. 计算机耍人,抖音中的连环套路耍人问题
  15. 如何使用纯Servlet做一个单表的CRUD操作
  16. [PowerQuery] PowerQuery各个组件功能
  17. 初探Java设计模式------观察者模式
  18. 武大计算机学院彭敏,彭敏 - 教师简历 CV- 武汉大学计算机学院
  19. 使用StrongSwan配置IPSec
  20. vue显示农历_ElementUI显示农历的日历

热门文章

  1. SecureCRT设置标签显示标题
  2. 美术宝软件测试面试流程怎么样,美术宝怎么样?硬核对比测评,告诉你好不好!...
  3. SmartQQ二维码登陆接口分析
  4. direct wifi 芯片_Wifi Direct是什么意思
  5. python安装annoy
  6. AI芯片技术市场思考
  7. 浅析:如何转行做产品经理?
  8. 2021年华为云城市峰会·长沙站,WeLink带着干货来了!
  9. java线程间通信的方式
  10. HarmonyOS开发21:CommonDialog抽取工具类