GUI(Graphical User Interface)是程序和软件使用者的接口,好的GUI是一个良好的软件的前提,在这里演示一下用PyQt5做一个GUI的方法

软件需求:python3.6 用的是Anaconda3.6(自带PyQt5,pip)

       pycharm

     PyQt5

       QtTools

环境安装和配置

由于Anaconda自带了PyQt5,不用再安装,但要用pip下载QtTools。

pip install PyQt5-tools

如果装的不是Anaconda,可以在pycharm里查一下有没有装pyqt的模块,没有的话直接pip下载安装

pip install PyQt5

但是在安装的时候发现速度格外慢,网上查了下可以这样安装,用了豆瓣的镜像

pip install PyQt5-tools -i https://pypi.douban.com/simple
pip install PyQt5 -i https://pypi.douban.com/simple 

PyQt5-tools安装好了以后,要在pycharm的setting里的外部工具里做配置环境(按图中的加号添加)

第一步添加QtDesigner,找到刚才装好的PyQt5-tools的路径(在python路径下的pyqt5_tools文件夹下有个designer.exe。我的win10是C:\Users\user\Anaconda3\Lib\site-packages\pyqt5_tools,反正在设python的环境变量时应该已经找过了)

Tool settings里的Program选择刚才说的路径下的designer.exe,工作路径就直接粘贴$FileDir$

第二步添加PyUIC

Program就是python.exe的路径,Parameters直接粘贴下面的代码,工作路径依旧是$FileDir$

-m PyQt5.uic.pyuic  $FileName$ -o $FileNameWithoutExtension$.py

好了以后可以用下面的代码试一试,看看PyQt是否安装、配置完成

 import sys
from PyQt5 import QtWidgets,QtCore
app = QtWidgets.QApplication(sys.argv)
widget = QtWidgets.QWidget()
widget.resize(860,480)
widget.setWindowTitle("hello,pyqt5")
widget.show()
sys.exit(app.exec_())

GUI_Test

如果配置正确的话,运行后会弹出一个对话框.

下面我们来结合python的代码来做一个程序,用9个按钮,像计算器一样,按一个按钮可以有对应的显示值

首先,在charm里打开QtDesigner,

选择新建一个Main Window。将左边的Text Edit拖到中间的界面中,然后在右边更改控间的名称(我用的是data_display)

再加入九个按钮,把控件名称改好,我用的是num_1到num_9,一共9个按钮

把做好的界面保存好(路径随便,文件格式是.ui),下面就该写python的代码了!

import sys
from PyQt5 import QtCore, QtGui, uic,QtWidgets
from functools import partial
qtCreatorFile = "calc.ui" #这里要加ui文件的路径
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile) class MyApp(QtWidgets.QMainWindow, Ui_MainWindow): def __init__(self):
super(MyApp,self).__init__() #继承父类
self.data = ''
QtWidgets.QMainWindow.__init__(self)
Ui_MainWindow.__init__(self)
self.setupUi(self)
# self.num_1.clicked.connect(self.set_num)
# self.num_2.clicked.connect(self.show_num('2'))
self.num_1.clicked.connect(partial(self.set_num,'')) #信号——槽机制,用partial给槽传递参数
self.num_2.clicked.connect(partial(self.set_num,''))
self.num_3.clicked.connect(partial(self.set_num,''))
self.num_4.clicked.connect(partial(self.set_num,''))
self.num_5.clicked.connect(partial(self.set_num,''))
self.num_6.clicked.connect(partial(self.set_num,''))
self.num_7.clicked.connect(partial(self.set_num,''))
self.num_8.clicked.connect(partial(self.set_num,''))
self.num_9.clicked.connect(partial(self.set_num,'')) def set_num(self,x):
self.data += x
self.data_display.setText(self.data) if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = MyApp()
window.show()
sys.exit(app.exec_())

运行一下,OK

这段代码有这几个地方要注意一下:

1.我们用了partial来实现给槽传递参数的目的。

self.num_1.clicked.connect(partial(self.set_num,''))

由于Qt用的是信号——槽的机制,我们把set_num这个通过槽连到了按钮被点击的信号上。但是每个按钮对应一个函数太麻烦,这里做了个解耦,通过传递参数直接做一个函数就可以了,但是直接调用槽是不能传递参数的

self.num_1.clicked.connect(set_num)

他是这么用的,所以这里就用了个partial函数来把实参数传递给函数里的形参。

2.在定义ui路径的时候如果python文件和ui文件是在一个文件夹下,可以直接用文件名就可以,否则要用绝对路径!

qtCreatorFile =  r"D:\python\GUI\calc.ui"

记得字符串前要加‘r’来防止转义啊!


最后还留个悬念:怎么可以把这个界面和上回做的计算器连到一起呢?还在想办法没有解决!——20190303

GUI学习之〇——PyQt5安装的更多相关文章

  1. QT学习之windows下安装配置PyQt5

    windows下安装配置PyQt5 目录 为什么要学习QT 命令行安装PyQt5以及PyQt5-tools 配置QtDesigner.PyUIC及PyRcc 为什么要学习QT python下与界面开发 ...

  2. Python gui编程pyQt5安装步骤t

    Python gui编程pyQt5安装步骤         pip install PyQt5 Pip3 install PyQt5               https://riverbankco ...

  3. Python gui编程pyQt5安装步骤

    Python gui编程pyQt5安装步骤 =============================== -m PyQt5.uic.pyuic  $FileName$ -o $FileNameWit ...

  4. PyQt5学习一---环境的安装和配置

    PyQt5环境安装 1.Python环境(我在练习的时候是用的Python3.6.8) 2.PyQt5安装 首先安装sip pip install sip 然后安装PyQt5-tools pip in ...

  5. pyqt5安装与pycharm配置

    最近几天新入坑了python的GUI设计,回想一下我为什么会入门这个???好像是在知乎上看到你都用 Python 来做什么? 这篇文章,看到有人回答说将python打包成exe文件,然后就想把之前弄得 ...

  6. InfluxDB学习之InfluxDB的安装和简介

    最近用到了 InfluxDB,在此记录下学习过程,同时也希望能够帮助到其他学习的同学. 本文主要介绍InfluxDB的功能特点以及influxDB的安装过程.更多InfluxDB详细教程请看:Infl ...

  7. Java 学习第一步-JDK安装和Java环境变量配置

    Java学习第一步——JDK安装及Java环境变量配置 [原文]  2014-05-30 9:09  Java SE  阿超  9046 views Java作为当下很主流的编程语言,学习Java的朋 ...

  8. 跟我学习dubbo-ZooKeeper注册中心安装(2)

    注册中心 可选方案:zookeeper.Redis 1.建议使用dubbo-2.3.3以上版本的使用zookeeper注册中心客户端 2.Zookeeper是Apache Hadoop的子项目,强度相 ...

  9. OpenGL学习之windows下安装opengl的glut库

    OpenGL学习之windows下安装opengl的glut库 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装.  Windows环境下的GLUT下载地址:(大小约为15 ...

随机推荐

  1. c# 动态绘制直线和曲线

    c# 动态绘制直线和曲线   在本案例中利用Graphics对象动态地绘制直线和曲线.程序运行后,选择“直线”单选按钮,然后按下鼠标左键拖动鼠标就可以绘制直线,选择“曲线”单选按钮,然后移动鼠标就可以 ...

  2. C++类中this指针的理解

    先要理解class的意思.class应该理解为一种类型,象int,char一样,是用户自定义的类型.用这个类型可以来声明一个变量,比如int x, myclass my等等.这样就像变量x具有int类 ...

  3. Docker基本命令与使用 —— Docker容器的网络连接(四)

    一.Docker容器的网络基础 通过ifconfig查看docker0的网络设备,docker守护进程就是通过docker0为docker的容器提供网络连接的各种服务. docker0是Linux虚拟 ...

  4. 1DAY centos 7.4 u盘安装、网络安装

    0xff01 重庆大学开源下载centos 1.下载地址 http://mirrors.cqu.edu.cn/CentOS/7.4.1708/isos/x86_64/  选择 CentOS-7-x86 ...

  5. js运算符逻辑!和instanceof的优先级

    写js时间长了,运算符优先级很可能自然而然的就形成习惯了,也不需要特别注意优先级的问题. 至少到目前为止,我也没有真正了解过js当中所有运算符的具体优先级.也没有出过什么重大的问题. 但是直到今天,在 ...

  6. Suricata之outputs(输出选项)

    outputs stats.log(统计数据包信息的日志) 配置文件:默认开启,数据包统计时间间隔默认为8S 日志文件:主要统计规定时间间隔内数据包的总量,各种不同类型数据包的数量以及数据包的大小等信 ...

  7. Android 开发 VectorDrawable 矢量图 (三)矢量图动画

    VectorDrawable 矢量图 三部曲: Android 开发 VectorDrawable 矢量图 (一)了解Android矢量图与获取矢量图 Android 开发 VectorDrawabl ...

  8. Xeon Phi 《协处理器高性能编程指南》随书代码整理 part 2

    ▶ 第四章,逐步优化了一个三维卷积计算的过程 ● 基准代码 #include <stdio.h> #include <stdlib.h> #include <string ...

  9. 分布式计算课程补充笔记 part 1.5

    ▶ 编写 SLURM 脚本 #!/bin/bash #SBATCH -J name # 任务名 #SBATCH -p gpu # 分区名,可为 cpu 或 gpu #SBATCH -N # 节点数 # ...

  10. 面向对象开发C++快速入门视频教程 C++基础加实战视频教程

    课程目录: ├<C++面向对象高级开发(上)> │ ├1.C++编程简介.mp4 │ ├2.头文件与类的声明.mp4 │ ├3.构造函数.mp4 │ ├4.参数传递与返回值.mp4 │ ├ ...