python制作qq登录界面_electron 仿制QQ登录界面

2023-10-20 10:59

本文主要是介绍python制作qq登录界面_electron 仿制QQ登录界面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先来看看qq的登录界面:

b13170f69ac71276535e6e1a0debf34c.png

准备开发

制作一个窗口先

主进程代码:

import {BrowserWindow, webContents, app, ipcMain} from 'electron'

LoginWindow(); //暂时调用

ipcMain.on('quitApp', () => {

app.quit();

});

function LoginWindow() {

const loginURL = process.env.NODE_ENV === 'development' ? `http://localhost:9080/#/login` : `file://${__dirname}/index.html/#/login`;

const loginWindow = new BrowserWindow({

width: 430,

height: 328,

alwaysOnTop: true,

modal: true,

frame: false,

darkTheme: true,

resizable: false,

minimizable: false,

maximizable: false,

transparent: true,

webPreferences: {

devTools: false,

}

});

loginWindow.setMenu(null);

loginWindow.loadURL(loginURL);

}

界面基本布局

我们先大概做一个这样的界面

26256d664a7e406c5fc908cf5384416d.png

页面代码:

import '@/assets/css/login.css'

export default {

}

样式代码:

/**

取消全部的外边距和内边距

*/

* {

padding: 0;

margin: 0;

}

/*设置窗口的样式*/

.mainWindow {

cursor: pointer; /*设置手型*/

border: 1px solid red; /*加一个边框 调试样式 最后要删除或者更改**/

width: 428px; /*设置宽度 必须要和主进程中设置的一样 不能大于主进程中设置的宽度 否则会出现滚动条*/

height: 326px; /*设置高度 必须要和主进程中设置的一样 不能大于主进程中设置的高度 否则会出现滚动条*/

position: relative; /*设置为相对定位*/

border-radius: 4px; /*设置圆角*/

}

/**

header的样式 header中只会有一个关闭按钮 处于右上角

*/

.mainWindow header.header {

position: absolute; /*设置绝对定位 因为背景在他下面*/

height: 30px; /*设置高度*/

background: rgba(0, 0, 0, 0.5); /*暂时设置的 后面要删除或者更改*/

border-radius: 4px 4px 0 0; /*给header的左上角 右上角设置圆角 不然会出现很尴尬的页面*/

width: 428px; /* 因为设置了绝对定位 设置宽度*/

}

/**

背景

*/

.mainWindow main .bg {

height: 124px; /*设置高度*/

width: 428px; /*设置宽度 也可以不用设置 因为这个元素没有设置绝对定位 所以默认就是100%*/

border-radius: 4px 4px 0 0; /*给左上角 右上角设置圆角 不然会出现很尴尬的页面 这里和header重合在一起了*/

background: blue; /*暂时设置的 后面要删除或者更改*/

}

/**

放置表单的元素

*/

.mainWindow main .body {

width: 428px; /*设置宽度 也可以不用设置 因为这个元素没有设置绝对定位 所以默认就是100%*/

height: 172px; /*设置高度 这里的高度是 主窗口(326) - footer(30) - 背景(124) 因为header设置了绝对定位 所以不用关 */

background: green; /*暂时设置的 后面要删除或者更改*/

}

.mainWindow footer.footer {

position: absolute; /* 设置绝对定位 要让他处于窗口的最底部*/

height: 30px; /*设置高度 */

background: red; /*暂时设置的 后面要删除或者更改*/

bottom: 0; /*让footer处于底部*/

width: 428px; /* 因为设置了绝对定位 设置宽度*/

}

窗口拖动

注意 不要使用内置的拖动 我们要自己实现!

在页面中加入以下代码就可以实现拖动了!

data() {

return {

windowX: 0,

windowY: 0,

}

},

mounted() {

let win = this.$electron.remote.getCurrentWindow();

document.addEventListener('mousedown', function (e) {

this.windowX = e.x;

this.windowY = e.y;

document.addEventListener('mousemove', moveEvent);

});

document.addEventListener('mouseup', function () {

this.windowX = 0;

this.windowY = 0;

document.removeEventListener('mousemove', moveEvent)

});

function moveEvent(e) {

win.setPosition(e.screenX - this.windowX, e.screenY - this.windowY)

}

}

设置背景图

将css里面的 .bg修改成:

.mainWindow main .bg {

height: 124px; /*设置高度*/

width: 428px; /*设置宽度 也可以不用设置 因为这个元素没有设置绝对定位 所以默认就是100%*/

border-radius: 4px 4px 0 0; /*给左上角 右上角设置圆角 不然会出现很尴尬的页面 这里和header重合在一起了*/

background: url("../images/login-back.gif") 10px;

background-size: 100%;

}

完成之后效果如如下:

b9388a548ce3317e29f1159e24d8ea56.gif

制作顶部

顶部的logo和最小化就不做了 只做一个关闭的按钮

去阿里巴巴图标库下载字体文件之后放到assets/fonts目录中

在页面中加入:

import '@/assets/fonts/iconfont.css'

header代码:

css文件

注意 在css .mainWindow header.header 添加

由于我背景图的关系 按钮可能不太明显 这问题不大 大家可以自己换一个图!

background: rgba(255, 255, 255, 0.2); /*暂时设置的 后面要删除或者更改*/

text-align: right;

.mainWindow header.header span{

display: inline-block;

height: 30px;

width:30px;

text-align: center;

line-height: 30px;

color:#E4393c;

}

.mainWindow header.header span:hover{

background-color: rgba(255,255,255,0.6);

}

制作表单页

表单界面代码

创建一个子组件 login.vue

写入如下代码:

登录

export default {

name: "login"

}

表单页css

需要将 .mainWindow main .body 的背景颜色调成#FFFFFF

.form form{

padding:10px 90px 0 90px;

}

.form_item{

height: 40px;

position: relative;

}

.form_item i.iconfont{

position: absolute;

top:5px;

}

.form_item input{

outline: none;

border:none;

padding-left: 20px;

font-size: 16px;

width: 230px;

height: 30px;

border-bottom: 1px solid #CCC;

}

.buttons{

text-align: center;

}

.buttons button{

background-color: #CF000E;

border: none;

width: 250px;

color: #FFFFFF;

height: 35px;

cursor: pointer;

font-size: 14px;

border-radius: 4px;

outline: none;

}

效果

最后看到是这样的

298daf140640f5a5cb605ec1b7348c06.png

复选框美化

组件代码

css代码

.login_options{

margin-bottom: 10px;

margin-top: 5px;

}

.login_options .option_item {

display: inline-block;

width: 13px;

height: 13px;

margin-right: 5px;

position: relative;

border: 1px solid orange;

vertical-align: middle;

cursor: pointer;

top: -2px;

}

.login_options .option_item input {

opacity: 0;

}

.login_options i.text{

display: inline-block;

margin-right: 14px;

font-size: 13px;

font-style: normal;

}

.login_options .option_item span.checked {

position: absolute;

top: -4px;

right: -3px;

font-weight: bold;

display: inline-block;

width: 20px;

height: 20px;

cursor: pointer;

}

.option_item span.checked img {

width: 100%;

height: 100%;

}

input[type="checkbox"] + span {

opacity: 0;

}

input[type="checkbox"]:checked + span {

opacity: 1;

}

效果

7c989d1e69240ce36a1f68dbafe6da34.pnge2b83fe860a1cfd0ed8bb8ccfef3e20c.png

注册页面

我们改进一点 因为qq的注册是一个连接到web页面去申请qq号码的 不过我做的是点击注册将界面切换到注册界面,只不过是

在写注册界面代码之前先将父组件种的login注释掉备用 (别删除哦) 在父组件中引入Register组件

注册的逻辑是这样的 在注册界面输入手机号和图形验证码 获取到短信验证码输入之后跳转到下一步输入密码

如果将全部的逻辑写到一个组件中会导致太长 虽然有办法解决 但是之后使用动画就很难看了!

界面代码

获取短信验证码

下一步

export default {

name: "register"

}

界面Css代码

.captcha {

position: absolute;

width: 120px;

height: 30px;

top: -2px;

right: 0;

}

.captcha img {

width: 100%;

height: 100%;

}

.send_sms_captcha {

position: absolute;

top: -2px;

right: 0;

}

.send_sms_captcha button{

width:120px;

height: 30px;

border:none;

outline: none;

cursor: pointer;

border-radius: 4px;

}

父组件代码

部分代码:

效果

991d4fd189bac4d8d6e0d009376d25ad.png

注册步骤2

界面代码

登录

export default {

name: "steps2"

}

展示

ae818379916653cfb3686430183d9005.png

footer代码

jie简介

在上面中footer里面显示了注册账号

其实这只是暂时的方案 为了方便截图

首先来分析一下 在登录页面的时候在底部显示注册账号 在注册第一步的时候在底部左侧显示已经账号,在第二步骤的时候显示返回上一步

我们有很多办法在子组件通知父组件去显示不同的文字

作者给出两个方案:

1: 通过子组件给父组件传值

2: 使用vuex

3: 将footer拆分到各个组件中

我们代码中使用拆分就行了 比较简单点

将父组件的footer删除

往组件login.vue steps1.vue steps2.vue 组件中加入footer

login.vue:

登录

注册账号

export default {

name: "login",

methods:{

toggleWindow(){

this.$store.dispatch('toggleLogin');

}

}

}

steps1.vue

获取短信验证码

下一步

已有账号

export default {

name: "steps1",

methods:{

toggleWindow(){

this.$store.dispatch('toggleLogin');

},

toggleSteps(){

this.$store.dispatch('toggleSteps');

},

}

}

steps2.vue

注册

返回上一步

export default {

name: "steps2",

methods:{

toggleSteps(){

this.$store.dispatch('toggleSteps');

},

}

}

vuex 代码

const state = {

steps: true,

login: true,

};

const actions = {

toggleSteps: function ({state, commit}) {

// state.steps = true;

state.steps = !state.steps;

},

toggleLogin({state, commit}){

state.login = !state.login;

}

};

export default ({

state,

actions

});

效果展示

4c3f570e877eabee502f3df52eca0434.gif

添加动画效果

上面这些完成之后有点单调 尤其是切换的时候 我们可以用到 animateCss

animateCss 下载地址:https://daneden.github.io/ani...

子组件加入:

import '@/assets/css/animate.css'

之后我们在代码中加入效果就行了

将父组件改成:

:duration="500"

:enter-active-class="'animated ' + (login ? 'bounceInRight' : 'bounceInLeft')"

:leave-active-class="'animated ' + (login ? 'bounceOutLeft' : 'bounceOutRight')"

>

子组件 register.vue改成:

:duration="500"

:enter-active-class="'animated ' + (steps ? 'bounceInRight' : 'bounceInLeft')"

:leave-active-class="'animated ' + (steps ? 'bounceOutLeft' : 'bounceOutRight')"

>

修改下css 因为要使用动画就要将main定位才能用

加入:

.mainWindow main {

position: absolute;

}

效果展示:

6d6bada39afbcbe2f9d1a16614202cd0.gif

到这里就差不多了 代码太多没法一一发布上来 如果有需要的可以去github下载或者加QQ群 814270669

github地址:https://github.com/lihaotian0...

码云地址: https://gitee.com/leehaotian/...

我的github账号出了问题 一直登录不上去 所以就先发布到码云了

这篇关于python制作qq登录界面_electron 仿制QQ登录界面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/246646

相关文章

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

python 字典d[k]中key不存在的解决方案

《python字典d[k]中key不存在的解决方案》本文主要介绍了在Python中处理字典键不存在时获取默认值的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录defaultdict:处理找不到的键的一个选择特殊方法__missing__有时候为了方便起见,

使用Python绘制可爱的招财猫

《使用Python绘制可爱的招财猫》招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中,今天,我将带你用Python和matplotlib库从零开始绘制一... 目录1. 为什么选择用 python 绘制?2. 绘图的基本概念3. 实现代码解析3.1 设置绘图画

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主