PyQt5教程(十二)——实现QQ登录界面(六、实现鼠标拖动界面,鼠标事件)
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登录界面(六、实现鼠标拖动界面,鼠标事件)相关推荐
- Wix 安装部署教程(十二) -- 自动更新WXS文件
原文:Wix 安装部署教程(十二) -- 自动更新WXS文件 上一篇分享了一个QuickWIX,用来对比两个工程前后的差异,但是这样还是很繁琐,而且昨天发现有Bug,目录对比有问题.这次改变做法,完全 ...
- 【Visual C++】游戏开发笔记四十四 浅墨DirectX教程十二 网格模型和X文件使用面面观
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8586540 作者:毛星云(浅墨 ...
- 【Visual C++】游戏开发笔记四十四 浅墨DirectX教程十二 网格模型和X文件使用面面观...
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/zhmxy555/article/details/8586540 作者:毛星云(浅墨) ...
- VML极道教程(十二) VML编程大结局
本系列文章导航 VML极道教程(一) VML介绍 VML极道教程(二) VML入门 VML极道教程(三) 标记实战与line线 VML极道教程(四) oval圆rect矩型 VML极道教程(五) Ro ...
- twisted系列教程十二–为server 增加一个service
One More Server 在第九部分和第十部分我们介绍了关于诗歌的变形引擎的想法,最后我们实现了cummingsifier,我们还让它抛出随机的异常来模拟错误.但是假如这个变形的引擎在另外一台服 ...
- nCode:DesignLife案例教程十二
nCode:DesignLife 案例十二--Virtual Strain Gauge Correlation 12.1 案例文件 12.2 背景 12.3 创建流程 12.4 保存虚拟应变计 12. ...
- Lance老师UI系列教程第三课-QQ登录注册界面的实现(android-2012最新版)
分类: android UI教程2012-08-06 22:37 3731人阅读 评论(6) 收藏 举报 uiandroidqqlayoutbutton UI系列教程第三课:腾讯登录注册界面的实现 今 ...
- Android开发系列(十二) QQ联系人列表升级版——ListView和ScrollView高阶使用方法...
今天继续进行QQ界面的开发工作.前一段时间讲过ExpandableListView的使用并且设置了一个比较简单的具有子菜单效果的联系人列表,本节添加进ScrollView控件,对QQ2013版的联系人 ...
- 尚硅谷在线教育十二:微信登录
文章目录 1.OAuth2.0 2. 微信扫描登录的准备 3. 微信登录 3.1 在service-ucenter模块配置文件 微信id,密钥和域名地址 3.2创建读取配置文件的类 3.3 生成微信扫 ...
最新文章
- VTK修炼之道73:交互部件_Widget应用综述
- “尽快成立国家级权威信息安全部门”
- linux自动获取ip网卡配置文件,linux 命令行下配置网卡自动获取 IP
- 基于事件驱动架构构建微服务第19部分:使用 SignalR 和 Azure Active Directory 构建和保护实时通信...
- 博士生找工作的真相!就问一声:你是否足够强大?
- 【MySQL】Linux 命令启动 mysql
- TypeError: 'str' object is not callable
- 通达信在linux下界面难看,通达信看盘设置小技巧,主力也在用的设置技巧
- 免费的查询IP归属地接口分享
- 3D 机器视觉应用并采用 DLP 技术的精确点云生成
- dlib检测人脸landmarks
- BugKu ——WP(MISC[二])
- python测试驱动开发pdf_python 测试驱动开发的简单例子
- 计算机耍人,抖音中的连环套路耍人问题
- 如何使用纯Servlet做一个单表的CRUD操作
- [PowerQuery] PowerQuery各个组件功能
- 初探Java设计模式------观察者模式
- 武大计算机学院彭敏,彭敏 - 教师简历 CV- 武汉大学计算机学院
- 使用StrongSwan配置IPSec
- vue显示农历_ElementUI显示农历的日历