当前位置: 首页 > news >正文

pyqt5 listview 不默认选中_快速学习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坐标处的位置。这里我们来看一下屏幕坐标是怎么设定的,来看看下图。

ddf72a0d00997a47ba47ec0839e71ec7.png

通过上图我们可以知晓,坐标原点是从哪里开始计算的,我们要是将程序中的(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咯。哈哈哈哈。

运行效果图:

1e11e6ceded670d72672742947ccf63d.png

然后看第三个案例:

额,今天是暂时不能运行着第三个了,因为在安装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' 截图就是:

ffe05abba9ca247fb7fac754eb864020.png

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

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

欢迎交流讨论。

相关文章:

  • 结构体当中的变量scanf输入是否需要取地址_面对万物互联的智能世界,你是否也想分一杯羹...
  • 安卓listview点击空白事件_王者荣耀安卓系统的角色怎么转移到苹果系统上?
  • 复制opencv的代码出来运行为什么速度差很多?_我只用了二十行代码给(都挺好)剧组全部人脸识别了!...
  • layer.open传参数到子页面_产品要页面72变,x满足她
  • ospf hello时间和dead_HCIP学习 | OSPF魔鬼知识点,你又知道多少呢?
  • python装饰器 稀里糊涂_python--装饰器
  • 正在摧毁协议处理器_Netty2020最新版介绍:代码+方案+响应协议服务+客户
  • centos 忘记root密码_redhat重置密码
  • 直接编辑class文件_JVM循序渐进(一) 浅识class文件
  • 用python和opencv来测量目标到相机的距离_毕业课题项目——基于单目摄像头的距离测量...
  • c语言判断素数_C语言的那些经典程序 第十一期
  • delphi usb通讯 com通讯_你知道电脑上怎么设置“串口号COM”吗?教你一个方法,1分钟学会...
  • c++ format长度限制_2020年C证(安全员)考试总结及C证(安全员)模拟试题
  • post多个参数_2020Python编程高频面试题:Post和get区别?
  • docker rabbitmq_SpringBoot2.x系列教程64--消息队列之RabbitMQ安装及环境变量配置
  • [笔记] php常见简单功能及函数
  • java8 Stream Pipelines 浅析
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • orm2 中文文档 3.1 模型属性
  • Sequelize 中文文档 v4 - Getting started - 入门
  • ------- 计算机网络基础
  • 前端面试总结(at, md)
  • 探索 JS 中的模块化
  • No resource identifier found for attribute,RxJava之zip操作符
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 数据库巡检项
  • (145)光线追踪距离场柔和阴影
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (接口封装)
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (一一四)第九章编程练习
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .mysql secret在哪_MYSQL基本操作(上)
  • .net 4.0发布后不能正常显示图片问题
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Micro Framework初体验
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .Net转前端开发-启航篇,如何定制博客园主题
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • ;号自动换行
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [ACM] hdu 1201 18岁生日
  • [Android学习笔记]ScrollView的使用
  • [c#基础]DataTable的Select方法
  • [CareerCup][Google Interview] 实现一个具有get_min的Queue
  • [CSAWQual 2019]Web_Unagi ---不会编程的崽
  • [HTML]Web前端开发技术29(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
  • [iOS]让Xcode 4.2生成的app支持老的iOS设备(armv6)