目录

  • 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

python 桌面程序UI python怎么写桌面程序_GM工具


qtdesigner配置如下:

Program: D:\Python37\Scripts\designer.exe

Working directory: $FileDir$

python 桌面程序UI python怎么写桌面程序_python桌面程序_02


pyuic配置如下:

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

python 桌面程序UI python怎么写桌面程序_python桌面程序_03


配置完成后,pycharm中打开qtdesigner验证下是否成功了

点击 toos–external tools – qtdesigner,弹出 qt designer工具即可

python 桌面程序UI python怎么写桌面程序_python打包exe_04


python 桌面程序UI python怎么写桌面程序_python桌面程序_05

3 开始写了

3.1 画个界面

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


具体怎么画,百度下或者有空补充下吧

画完了,保存下,保存到工程根目录即可,文件名:GMTools.ui

3.2 把画的界面转为py

这就用到我们之前加的 pyuic了

pycharm中右键GMTools.ui,找到 pyuic,点击即可生成一个 GMTools.py

python 桌面程序UI python怎么写桌面程序_python 桌面程序UI_06


注意哦:

我们在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()

差不多这些吧~~~

看下代码结构:

python 桌面程序UI python怎么写桌面程序_python桌面程序_07

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


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)

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