学pyqt5之前需要学python吗_快速学习pyqt5(1)--入门

学习于:PyQt5图形界面编程 想要系统学习的同学建议可以去这个专栏好好学习,没有任何语言基础和计算机基础的也建议直接去看那个专栏。我这里是有java基础了,所以就不重复,针对快速学习使用。

学习这个的目的是完成学校的SIT项目,所以在这里记录完成这个项目的全部过程。至于软件的安装,环境的搭建之类的,大家可以去看那个专栏,我就不复述了。我使用的是spyder进行编程,基于python3.7的环境。

然后编程方式有两种:1.直接手写全部代码 2.使用工具拖拽完成(如eric6、designer)

第一个问题:运行代码的时候出现 kernel died, restarting 提示

解决方法 :在命令行输入conda update spyder即可

首先,第一份代码:

import sys

from PyQt5.QtWidgets import QApplication, QWidget

if __name__ == '__main__':

app = QApplication(sys.argv)

w = QWidget()

w.resize(250, 150)

w.move(300, 300)

w.setWindowTitle('my first windows')

w.show()

sys.exit(app.exec_())

解释:

import sys

from PyQt5.QtWidgets import QApplication, QWidget

导入相关的包,PyQt5.QtWidgets里面的QApplication, QWidget

作用:QtWidgets模块包含了一整套UI元素组件,用于建立符合系统风格的classic界面,非常方便,可以在安装时选择是否使用此功能。

if __name__ == '__main__':

这个属于Python基础知识,如果写了这句话并将执行的语句放到这个判断语句的后面,那么只有在程序本身被执行的时候才能运行这个判断语句下面的语句。否则程序被作为模块导入的时候就不会执行(这个建议自己找本书或视频看,我的理解就是,你直接运行这个文件时,此时__name_属性就等于_main__,那么就会运行下面的代码,否则,如果作为模块导入,就不运行)。注意python是不需要括号来规范的,只需要保持对齐即可。

app = QApplication(sys.argv)

每个PyQt5应用程序必须创建一个应用程序对象。 sys.argv参数是来自命令行的参数列表。 Python脚本可以从shell运行。 写了这句话就能让我们的程序从命令行启动。

w = QWidget()

QWidget小部件是PyQt5中所有用户界面对象的基类。 我们提供了QWidget的默认构造函数。 默认构造函数没有父类。 没有父类口小部件称为窗口。

w.resize(250, 150)

resize()方法调整窗口小部件的大小。这里我们设定窗口的大小:宽250像素,高150像素。

w.move(300, 300)

move()方法将小部件移动到屏幕上x = 300,y = 300坐标处的位置。这里我们来看一下屏幕坐标是怎么设定的,来看看下图。

通过上图我们可以知晓,坐标原点是从哪里开始计算的,我们要是将程序中的(300,300)这个坐标改成(0,0),窗口就会跑到左上角去了,大家可以试试。

w.setWindowTitle('my first windows')

这个方法顾名思义,就是设置窗口的标题。

w.show()

show()方法在屏幕上显示窗口小部件。 一个小部件首先在内存中创建,然后在屏幕上显示。

sys.exit(app.exec_())

最后,我们进入应用程序的主循环(main loop)。 事件处理从这一点开始。 主循环(main loop)从窗口系统接收事件并将它们分派到应用程序小部件。 如果我们调用exit()方法或者主窗口小部件被破坏,那么主循环(main loop)就会结束。

sys.exit()方法确保一个干净的退出。

exec_()方法有一个下划线。 这是因为exec是一个Python关键字。 因此,使用exec_()。

GUI应用程序都是事件驱动的。比如键盘事件、鼠标事件等等。还有一些事件来自于系统内部,比如定时事件、其它文件事件等等。在没有任何事件的情况下,应用程序处于睡眠状态。这种事件驱动机制,GUI应用程序都需要一个主循环(main loop)。主循环(main loop)控制应用程序什么时候进入睡眠状态,什么时候被唤醒。所以主循环(main loop)就是干这个的。

然后第一步走到这里就算有基本认知了。

然后用面向对象编写:(大佬写的那个格式不对,调整了一下)

import sys

from PyQt5.QtWidgets import QApplication, QWidget

from PyQt5.QtGui import QIcon

class Ico(QWidget):

def __init__(self):

super().__init__()

self.initUI()

def initUI(self):

self.setGeometry(300, 300, 300, 220)

self.setWindowTitle('学点编程吧出品')

self.setWindowIcon(QIcon('aa.ico'))

self.show()

if __name__ == '__main__':

app = QApplication(sys.argv)

ex = Ico()

sys.exit(app.exec_())

解释: 这里有一个类,类名为Ico,它的父类为QWidg,通过( )即括号实现继承。里面有两个函数,init和initUI。init是构造函数,创建实例的时候(即下面ex=Ico(),这里不像java那样要使用new关键字进行实例的生成)就会自动调用init这个函数。init里面的super代表调用父类的init方法,这样就可以使用父类的东西,然后接着调用自己的initUI函数。

self.setGeometry(300, 300, 300, 220)

self.setWindowTitle('学点编程吧出品')

self.setWindowIcon(QIcon('xdbcb8.ico'))

上面的三种方法都已经从QWidget类中继承的。 setGeometry()做了两件事情:它在屏幕上定位窗口并设置它的大小;前两个参数是窗口的x和y位置;第三个是宽度;第四个是窗口的高度。实际上,它在一个方法中组合了resize()和move()方法。 最后一个方法设置应用程序图标。 为此,我们创建了一个QIcon对象。 QIcon接收到我们要显示的图标的路径(和当前程序在同一个目录下,我是直接网上随便下载了个ico文件)。最后的self.show()就是这个窗体的显示了。

然后到这里,我发现它每个函数的参数都有个self,这个就相当于this,也就是生成这个类的实例自己。java中一般都不写这个this的,因为调用的时候默认就是这个,父类的就是super。这样一看来,那么python不是要写很多的self咯。哈哈哈哈。

运行效果图:

然后看第三个案例:

额,今天是暂时不能运行着第三个了,因为在安装erric6的时候出现了异常,后面导致我的spyder都打不开了。

遇到的问题:

1.我安装了两个python。一个是mysql帮我弄的,2.7版本。一个是anaconda带的,3.7版本。然后就是cmd里默认使用2.7的。所以我百度了一下,发现把anaconda的环境变量放在mysql的前面就可以了。这个倒没啥,一下子就解决了。我的mysql原来是在系统环境变量里的,anaconda是在用户环境变量里的,所以我把mysql的环境变量放在了用户环境变量的最后面就ok了。

在这里学习了where python 和python list两个命令。

2.python install.py的时候,说我需要安装 QScintilla,然后我就pip install 这个了,接着又提示我:

Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问

然后网上说要加上--user ,然后我就加上它,就变成 pip install --user QScintilla 然后pip安装成功了。 这也没啥。

3.搞定上面之后,我又把一个没有的小东西安装上了。这都没啥。然后继续运行python install.py 出现下面的错误:

PyQt5 could not be detected. Error: No module named 'PyQt5.sip' 截图就是:

此时,我在python里import什么pyqt5啊,sip啊之类的都是可以import的。它这里也明明提示我这些都有了。可是它还是提醒我要安装pyqt5。然后我pip list,pyqt5的包都是在的,去安装路径找也都在,可它就是要我安装。在spyder里,我直接运行install.py文件,这里pyqt5啥的都说找到了,可是它却说我QScintilla没安装,可是我明明安装了啊,在cmd里都有了。然后一安装还出问题了。 我觉得可能是系统有点问题,然后重启。重启之后发现,spyder打不开了,anaconda里什么navigate啊之类的也打不开了。现在是代码都不用写了。改天再找个ide来写吧。

今天就算是学习了pyqt5的基础吧,看代码基本都能看懂了,没啥大问题。可是工具却没用上。额,就到这里了。

欢迎交流讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

reboot mysql fail_mysql 5.7.18,在系统重启后,为什么无法启动?

度娘也不给力,只好自己研究了。先把结论写出来吧。把pid文件换个位置,就好了。问题是, mysqld.servce的文件是从mysql的安装目录拷贝的,导致没有怀疑pid文件位置的问题。一开始还怀疑是不是自己在一些文件里拼写有误。后来&#x…

mysql 查看锁_别吵吵,分布式锁也是锁

Tomcat是这个系统的核心组成部分, 每当有用户请求过来,Tomcat就会从线程池里找个线程来处理,有的执行登录,有的查看购物车,有的下订单,看着属下们尽心尽职地工作,完成人类的请求,Tom…

php解析js的 arraybuffer_JS的所谓的第七种数据类型Symbol

首先,为什么说叫所谓呢?因为在2007年之前Js给予我们typeof解析数据类型的一共有六种(一直有争议,但是我们暂时就按typeof来算)functionNumberObjectbooleanStringundefined但当我们去 typeof Symbol () 的时候,会惊奇的发现&#…

JAVA MYSQL从数据库中提取图片_java web将图片存到储数据库和从数据库中读取图片...

(Notice:以下所有经验也是我根据网上的经验整理的,如有侵权可以联系我删除,Wx:IT_Ezra,QQ 654303408。 有问题讨论也可联系我,QQ同上。)一、分析一下基本流程从前台页面获取图片,后台接收图片文件转化成数据…

Ubuntu系统如何安装和卸载CUDA和CUDNN

背景 最近在学习PaddlePaddle在各个显卡驱动版本的安装和使用,所以同时也学习如何在Ubuntu安装和卸载CUDA和CUDNN,在学习过程中,顺便记录学习过程。在供大家学习的同时,也在加强自己的记忆。本文章以卸载CUDA 8.0 和 CUDNN 7.05 …

session.merge 缓存不更新_如何保证缓存与数据库双写时的数据一致性?

在做系统优化时,想到了将数据进行分级存储的思路。因为在系统中会存在一些数据,有些数据的实时性要求不高,比如一些配置信息。基本上配置了很久才会变一次。而有一些数据实时性要求非常高,比如订单和流水的数据。所以这里根据数据…

java替换图片中文字_Java 添加、替换、删除Word中的图片

文档中,可以通过图文混排的方式来增加内容的可读性,相比纯文本文档,在内容展现方式上也更具美观性。在给文档添加图片时,可设置图片的文本环绕方式、旋转角度、图片高度/宽度等;另外,也可对文档中已有的图片…

kafka如何保证不重复消费又不丢失数据_Kafka写入的数据如何保证不丢失?

我们暂且不考虑写磁盘的具体过程,先大致看看下面的图,这代表了 Kafka 的核心架构原理。Kafka 分布式存储架构那么现在问题来了,如果每天产生几十 TB 的数据,难道都写一台机器的磁盘上吗?这明显是不靠谱的啊!所以说,这…

不允许输入特殊字符的正则表达式_JavaScript正则表达式常用技巧

正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript 中,正则表达式也是对象。这些模式被用于 RegExp 的 exec 和 test 方法, 以及 String 的 match、matchAll、replace、search 和 split 方法。正则表达式的掌握程度能粗略地看出程序员的技术底子&#xff…

latex 算法_GitHub项目awesome-latex-drawing新增内容(四):绘制贝叶斯网络

近期,我们整理和开源了一个基于LaTeX的科技绘图项目,并将其取名为awesome-latex-drawing(GitHub网址为:https://github.com/xinychen/awesome-latex-drawing),案例包括贝叶斯网络、图模型、矩阵/张量示意图…

python123动物重量排序_python进阶

面向对象oopclass Student(object):def __init__(self,name,score)self.name nameself.score scoredef print_score(self)print(%s: %s % (self.name,self.score))给对象发消息实际上就是调用对象对应的关联函数,我们称之为对象的方法(Method)。面向对象的程序写出…

mysql中的生日应该是什么类型_MySQL中的定点数类型

上一篇文章我们唠叨了浮点数,知道了浮点数存储小数是不精确的。本篇继续唠叨一下MySQL中的另一种存储小数的方式 —— 定点数。浮点数文章闪现:什么, 0.3 - 0.2 ≠ 0.1 ? 什么鬼定点数类型正因为用浮点数表示小数可能会有不精确的情况,在一些…

python怎么制作图像_python数字图像处理(5):图像的绘制

实际上前面我们就已经用到了图像的绘制,如:io.imshow(img)这一行代码的实质是利用matplotlib包对图片进行绘制,绘制成功后,返回一个matplotlib类型的数据。因此,我们也可以这样写:importmatplotlib.pyplot …

axios代理跨域 cli4_vuecli 3.0之跨域请求代理配置及axios路径配置 莫小龙

vue-cli 3.0之跨域请求代理配置及axios路径配置问题:在前后端分离的跨域请求中,报跨域问题配置:vue.config.js:module.exports {runtimeCompiler: true,publicPath: /, // 设置打包文件相对路径devServer: {// open: process.pla…

string转为char数组_StringBuilder的区别是什么?String是不可变?一点课堂(多岸学院)...

String和StringBuffer、StringBuilder的区别可变性简单的来说:String 类中使用 final 关键字字符数组保存字符串,private final char value[],所以 String 对象是不可变的。而StringBuilder 与 StringBuffer 都继承自 AbstractStringBuild…

python去年软件排行_2017年编程语言排行榜,Python位居榜首(C语言需求最大)

最近IEEE Spectrum 发布了编程语言交互式排行榜,为很多学习代码的朋友们详解各类代码语言的需求和占有率。为学习代码的朋友们能更加重视哪一种编程语言而有一个明确的方向。下面排行榜123网为你公布2017年编程语言排行榜,Python位居榜首(C语言需求最大)。2017年编程…

mysql test数据库_mysql数据库test

Re介绍一下CentOS下MySQL数据库的安装与配置方法MySQL数据库配置的具体步骤:1、编辑MySQL的配置文件,使用vi /etc/my.cnf[rootsample ~]# vi /etc/my.cnf  ← 编辑MySQL的配置文件[mysqld]datadir/var/lib/mysqlsocket/var/lib/mysql/mysql.sock# Defau…

mysql 升级 openssl_【1分钟教程】LNMP架构应用实战 Openssl升级操作

由于实际生产环境需求,需要将LNMP环境中的openssl版本升级至目前最新版本openssl-1.1.0c,这玩意升级还真的不是一般的麻烦,由于它与系统各种服务都有相关的联系,比如ssh服务等,因此,升级非常的繁琐,所以今天…

miui秒解bl锁_MIUI12解锁bl篇(原谅我的过失,接上篇文章)

求原谅真心求原谅由于我的疏忽,上期教程不完整,对大家造成不便在这里给大家真诚道歉!对不起!请收下我的膝盖!!!我的上个教程小米手机MIUI系统降级任意版本通用教程,MIUI12→MIUI9因为…

腐蚀rust服务器命令_【使用 Rust 写 Parser】2. 解析Redis协议

系列所有文章https://zhuanlan.zhihu.com/p/115017849​zhuanlan.zhihu.comhttps://zhuanlan.zhihu.com/p/139387293​zhuanlan.zhihu.comhttps://zhuanlan.zhihu.com/p/146455601​zhuanlan.zhihu.comhttps://zhuanlan.zhihu.com/p/186217695​zhuanlan.zhihu.com在基本熟悉 n…