学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的基础吧,看代码基本都能看懂了,没啥大问题。可是工具却没用上。额,就到这里了。

欢迎交流讨论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值