目录

  • 1 效果图
  • 2 环境准备
    • 2.1 软件
    • 2.2 pycharm+pyqt5环境搭建
  • 3 开始写了
    • 3.1 画个界面
    • 3.2 把画的界面转为py
    • 3.2 写逻辑咯
      • 3.2.1 先看一眼界面什么样
      • 3.2.2 补上需求分析
      • 3.2.3 抽出些方法来
      • 3.2.4 基础知识
        • 3.2.4.1 事件监听
        • 3.2.4.2 获取界面输入
        • 3.2.4.3 给界面控件赋值
        • 3.2.4.4 我想要跟用我的软件的人说句话
        • 3.2.4.5 其他小知识
        • 3.2.4.6 操作mysql数据库
        • 3.2.4.7 打包为exe
  • 4 本工程源码
  • 5 优化
    • 5.1 添加输入限制
    • 5.2 添加分支流程

1 效果图

话不多说,先上图,有图有真相



2 环境准备

2.1 软件

python:3.7.3
pyqt5
pycharm

2.2 pycharm+pyqt5环境搭建

首先安装 pyqt5 pyqt5-tools

pip install pyqt5
pip install pyqt5-tools

pycharm中添加qtdesigner、pyuic
file–settings–tools–external tools中添加 qtdesigner、pyuic

qtdesigner配置如下:
Program: D:\Python37\Scripts\designer.exe
Working directory: $FileDir$

pyuic配置如下:
Program:D:\Python37\python.exe
Arguments:-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
Working directory:$FileDir$

配置完成后,pycharm中打开qtdesigner验证下是否成功了
点击 toos–external tools – qtdesigner,弹出 qt designer工具即可

3 开始写了

3.1 画个界面

首先建个工程(废话),打开 qt designer,画个界面,如下:

具体怎么画,百度下或者有空补充下吧
画完了,保存下,保存到工程根目录即可,文件名:GMTools.ui

3.2 把画的界面转为py

这就用到我们之前加的 pyuic了
pycharm中右键GMTools.ui,找到 pyuic,点击即可生成一个 GMTools.py

注意哦:
我们在coding过程中会觉得界面不对,需要修改的时候,直接在designer中修改保存后,回来pyuic一下即可
所以,不要在生成的GMTools.py 中编写任何东西,逻辑代码新建个文件写

3.2 写逻辑咯

3.2.1 先看一眼界面什么样

新建一个 GMToolsMain.py,我们的主逻辑就在这个文件里实现了
这个文件的基础框架是这样的

# coding=utf-8
import GMTools
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtWidgets import *if __name__ == '__main__':# 初始化数据# 。。。。。app = QApplication(sys.argv)MainWindow = QMainWindow()ui = GMTools.Ui_mainWindow()ui.setupUi(MainWindow)MainWindow.show()# 设置默认数据ui.lineEdit.setText('127.0.0.1')ui.lineEdit_2.setText('3306')ui.lineEdit_3.setText('root')ui.lineEdit_4.setText('1234')# 事件监听# 。。。。。sys.exit(app.exec_())

我们来试一下,运行下 GMToolsMain.py,你会看到这个界面

3.2.2 补上需求分析

接下来就是实现 界面上的按钮功能了,我们捋一下都有哪些功能

  1. 连接数据库、断开数据库连接
  2. 获取玩家列表
  3. 选择一个玩家
  4. 获取 基础信息、兵器信息、武将信息
  5. 修改 基础信息
  6. 修改 兵器信息
  7. 修改 武将信息
  8. 送个真屠龙套装
  9. 送个顶级晶石

嗯~~~ 差不多这些吧

3.2.3 抽出些方法来

针对上边这些功能,我们大概需要写这么几个方法

  1. connectDB()
  2. disconnectDB()
  3. getPlayerList()
  4. getPlayerData()
  5. modifyWeapon()
  6. modifyGeneral()
  7. sendTulong()
  8. sendJingshi()

差不多这些吧~~~
看下代码结构:

3.2.4 基础知识

3.2.4.1 事件监听

截止到上一步,我们已经把架子搭完了,但是逻辑怎么跟界面关联呢???
比如,点击了“连接数据库”按钮,怎么去调用connectDB方法??
这就用到了 事件监听(姑且叫这个名字吧,这好像是pygame的叫法。。。意思是一样的~)
我们先来个简单的,如下:

def clickedButton():print("你点击了按钮")if __name__ == '__main__':app = QApplication(sys.argv)MainWindow = QMainWindow()ui = GMTools.Ui_mainWindow()ui.setupUi(MainWindow)MainWindow.show()# 事件监听# 监听连接数据库按钮ui.Button_connectDB.clicked.connect(clickedButton)sys.exit(app.exec_())

如上,就实现了点击界面的 Button_connectDB 按钮,后台打印 “你点击了按钮”

3.2.4.2 获取界面输入

可以看到我们界面上控件有 按钮、下拉框、输入框
获取这些空间的文本,如下:

# 获取输入框内容
t1 = ui.lineEdit.text()
# 获取下拉框当前选中的项
t2 = ui.comboBox.currentText()
# 获取按钮的内容
ui.Button_connectDB.text()

这时候,有人会问:为什么要获取按钮的内容呢?
其实按钮内容可以变得,比如:数据库未连接时按钮显示"连接数据库",已连接时显示"断开连接"
那么问题来了:怎么改变按钮显示的内容呢???

3.2.4.3 给界面控件赋值

接上节问题:怎么改变按钮显示的内容呢???

# 把按钮内容改为断开连接
ui.Button_connectDB.setText('断开连接')
# 把输入框内容改为 123
ui.lineEdit.setText('123')
# 给下拉框赋一组数据
general_list = ['将军1', '将军2', '将军3', '将军4', '将军5', '将军6', '将军7', '将军8', '将军9', '玩游人生亲测', '玩游人生淘宝']
ui.comboBox.addItems(general_list)
# 把下拉框指定选中第3个,从0开始数哦
ui.comboBox.setCurrentIndex(3)

注意:setText方法只能set字符串!!!

3.2.4.4 我想要跟用我的软件的人说句话

之前我们说的都是一些”默默无闻“的东西,我想实时的跟人互动怎么办?
比如:点击了一个按钮,弹出一个提示框
还是用连接数据库按钮来展示,我们只需要改下clickedButton方法即可,如下

def clickedButton():# print("你点击了按钮")# 提示 终于碰到你,还好我没放弃QMessageBox.information(MainWindow, '提示信息', '终于碰到你,还好我没放弃', QMessageBox.Ok)if __name__ == '__main__':app = QApplication(sys.argv)MainWindow = QMainWindow()ui = GMTools.Ui_mainWindow()ui.setupUi(MainWindow)MainWindow.show()# 事件监听# 监听连接数据库按钮ui.Button_connectDB.clicked.connect(clickedButton)sys.exit(app.exec_())

来试一下,看看效果:

在最美好的年纪遇到你。。。。

3.2.4.5 其他小知识

毕竟是做一个工具,要给别人用的(可能并没有人用。。。),我们要做一些必要的限制
比如武将名称那个输入框是不能修改的

ui.lineEdit_j1.setEnabled(False)

断开数据库后,需要清空输入框中的信息

ui.lineEdit_j1.clear()
ui.comboBox.clear()

3.2.4.6 操作mysql数据库

基本关于pyqt相关的基础知识已经差不多了(本项目中用到的),接下来我们要操作数据库(毕竟GM工具就是用来改数据的)
操作mysql数据库用到了pymysql,先pip安装之

pip install pymysql

基本使用,直接上代码

import pymysql# 连接数据库
conn = pymysql.connect(host=ip,port=port,user=user,password=pwd,database='gcld',charset='utf8')
# 取到游标(好像是叫这个词)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 执行sql
cursor.execute("select player_id, player_name from player;")
# 获取查询结果,如果执行的是insert 或者 update 就不能这么用了
res = cursor.fetchall()

返回一个list,样式如下:

[{'player_id': 1, 'player_name': '将军1'}, {'player_id': 2, 'player_name': '将军2'}, {'player_id': 3, 'player_name': '将军3'}, {'player_id': 4, 'player_name': '将军4'}, {'player_id': 5, 'player_name': '将军5'}, {'player_id': 6, 'player_name': '将军6'}, {'player_id': 7, 'player_name': '将军7'}, {'player_id': 8, 'player_name': '将军8'}, {'player_id': 9, 'player_name': '将军9'}, {'player_id': 11, 'player_name': '亲测'}, {'player_id': 10, 'player_name': '人生'}]

3.2.4.7 打包为exe

看另一篇文章 pyinstaller打包python程序为exe

================================
至此,所有的技术点就完事了,努力coding吧少年

4 本工程源码

git仓库:https://github.com/suheping/gcld_gm

5 优化

5.1 添加输入限制

pyqt5 有个类叫 QRegExpValidator,正则表达式验证器
使用如下:

# 定义等级验证器 1到200的整数
lv_validator = QRegExpValidator()
lv_reg = QRegExp("0|200|1{0,1}[1-9]{1,2}")
lv_validator.setRegExp(lv_reg)
# 玩家等级加验证
ui.lineEdit_lv.setValidator(lv_validator)

嗯,正则~ 显得有点高大上了,再也不怕乱填了

5.2 添加分支流程

没有连数据库的时候,直接点了修改怎么办??
没有选定玩家的时候,直接点了修改怎么办??
愁人~~~
加判断吧

使用PyQt5写一个桌面程序相关推荐

  1. js桌面应用 Linux,从 1 到完美,用 js 和 electron 写一个桌面应用

    从 1 到完美,用 js 和 electron 写一个桌面应用 目前用 js 和前端技术写桌面软件的方案主要有两种:electron 和 nw.js.这两者在底层实现上有所不同,简单的说,electr ...

  2. 学了C语言,如何利用CURL写一个下载程序?—用nmake编译CURL并安装

    在这一系列的前一篇文章学了C语言,如何为下载狂人写一个磁盘剩余容量监控程序?中,我们为下载狂人写了一个程序来监视磁盘的剩余容量,防止下载的东西撑爆了硬盘.可是,这两天,他又抱怨他的下载程序不好用,让我 ...

  3. 控制台编写JAVA程序教程_写一个java程序的步骤是什么?写java程序技巧

    写Java程序是要按照步骤来的,这样才能写好一个java程序,那么接下来,我们就来给大家讲解一下写一个java程序的步骤是什么? (1)创建Java项目:"FileàNewàProjectà ...

  4. linux如何写一个daemon程序

    linux如何写一个daemon程序 http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html 不过现在linux直接提供了api实现 ...

  5. 用python3+ PyQt5写一个NFC模块的串口小工具的一星期

    用python3+ PyQt5写一个NFC模块的串口小工具的一星期 原因始于我们的小团队,没有写Windows上位机的人才.自己的[NFC读读写模](https://shop165836966.tao ...

  6. [WinForm]写一个小程序把指定目录的程序添加到开机自动启动(无法绕过360检查)

    网友阿东提示了这样一个需求:写一个小程序把指定目录的程序添加到开机自动启动,跳过360 我就到百度上搜了一下:C# 将程序添加到启动项 (写入注册表),及从启动项中删除 - 赤狐(zcm123) - ...

  7. 从0开始写一个小程序

    项目简介 从0开始写一个小程序,本来想写一个新闻类的程序,后来发现调用的聚合数据api每天只能访问100次,就换成豆瓣的了,直接用豆瓣的接口又访问不了,在网上查了一下,要把豆瓣的地址换成"h ...

  8. 彩票中奖java程序 随机30选7_写一个彩票程序:30选7

    1. 写一个彩票程序:30选7.随机(1~30之间)生成7个随机数,注意不能重复.然后从键盘输入7个数,对比7个数是否与随机数有相同的.最后显示"中了几个号".同时,如果中了7个号 ...

  9. 用python写一个小程序,解决买水果的问题?

    问题: 商店总共有三种水果,香蕉/苹果/葡萄,单价分别为3.5/5.0/3.0元/500克. 写一个小程序实现: 1.输出一个菜单:打印每种水果的价格: 2.寻问客户欲购买水果? 3.客户想购买的克数 ...

最新文章

  1. Hyper-V 性能加速之VMQ
  2. fasttext简单理解及应用
  3. ARSessionConfiguration报错问题
  4. wxWidgets:wxMenuItem类用法
  5. SQL 进行数据的更新和插入
  6. leetcode50:Pow(x, n)详解——pygo
  7. 一次kvm嵌套虚拟化踩坑经历
  8. Docker系列二~自定义网桥
  9. js+css实现验证码框,前端实现6位验证码输入框效果
  10. 苹果下周将推出紫色版iPhone 13 但只有高端版本
  11. mysql /!/_Mysql(一)
  12. 181016扇贝有道词霸每日一句
  13. python遍历目录下所有文件
  14. Tkinter实现模拟鼠标单击四位数字验证码自动刷新功能
  15. Word 中文编号标题与数字编号题注
  16. H5安卓下载以及IOS跳转AppStore下载App
  17. 【linux内核分析与应用-陈莉君】设备驱动模型
  18. Ae:导入 Photoshop 文件
  19. “幽灵刹车”困扰特斯拉
  20. 硕士论文各章节的篇幅多少比较合适

热门文章

  1. hadoop框架中怎么来优化
  2. 什么人不在生死簿_人在做, 天在看, 阎王爷“生死簿”上到底写了什么!
  3. springboot中JJWT的简单使用
  4. “百亿资金盘”PlusToken崩盘前,用户每天充值信仰
  5. 路由追踪命令:tracert、pathping!值得收藏!
  6. 如何“以输出倒逼输入”加速自己成长?
  7. VScode配置ffmpeg+sdl2.0开发环境(window+MinGW)
  8. CentOS 7 安装NFS
  9. 人脸识别-人脸建库学习:Sqlite3 的基本使用
  10. es5 和es6的区别