赞
踩
目录
当一个应用的UI(user interface 用户交互界面)比较复杂的时候,命令行方式就不便用户使用了,这时我们需要图形
界面。
如果用Python语言开发跨平台的图形界面的程序,主要有3种选择:
●Tkinter
Python官方采用的标准库,优点是开源、稳定,发布程序较小,缺点是控件相对较少。
●wxPython
基于wxWidgets,优点是开源、控件比较丰富,缺点是稳定性相对差点,文档少,用户少。
●PySide2、 PyQt5
基于Qt的Python库,优点是控件比较丰富、跨平台体验好、文档完善、用户多。
缺点是库比较大,发布出来的程序比较大。
不是开源的,所以看不到源码。
其中PySide2是Qt官方开发的,是亲儿子,而PyQt5是另一个组织开发的,是干儿子。以后发展的话肯定是PySide2会越来越茁壮,但PyQt5的用户也不要担心,很多情况下,PyQt5代码向PySide2的转变就是导包名称的变化而已。
博主的建议是,如果大家要开发小工具,界面比较简单,可以采用Tkinter.
如果是发布功能比较多的正式产品,采用基于Qt的PySide2、PyQt5
因为环境我早已经有了,所以这里就直接跳了,我py用的是anaconda,里面pyqt5的库都带了。
QApplication和QWidget分别代表整个应用程序和一个窗口。
QApplication 类管理图形用户界面应用程序的控制流和主要设置。 可以说 QApplication是Qt的整个后台管理的命脉
它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。它也处理绝大多数系统范围和应用程序范围的设置。
对于任何一个使用Qt的图形用户界面应用程序,都正好存在一个QApplication对象,而不论这个应用程序在同一时间内是不是有0、1、2或更多个窗口。
QApplication 对象是可以通过全局变量qApp访问。
argc和argv是命令行传进去的参数。比如linux里输入一个命令
cp file.c file1.c
那么argc=3 argv就是上面那行字符串数组。
因为图形编程有时也需要从命令行传递参数给程序,所以才会有argc和argv。
1.app.exec_()的作用是运行主循环,必须调用此函数才能开始事件处理,调用该方法进入程序的主循环直到调用exit()结束。主事件循环从窗口系统接收事件,并将其分派给应用程序小部件。如果没有该方法,那么在运行的时候还没有进入程序的主循环就直接结束了,所以运行的时候窗口会闪退。
2.不用sys.exit(app.exec_()),只使用app.exec_(),程序也可以正常运行,但是关闭窗口后进程却不会退出。
sys.exit(n)的作用是退出应用程序并返回n到父进程。
- import sys
-
- from PyQt5.QtWidgets import QApplication,QWidget
-
- if __name__=='__main__':
- # 创建QApplication实例
- app=QApplication(sys.argv)#获取命令行参数
- #创建一个窗口
- w=QWidget()
- #设置窗口的尺寸
- w.resize(400,200)#宽,高
- #移动窗口左上角坐标,其实就移动了窗口
- w.move(300,300)
- #设置窗口标题
- w.setWindowTitle('first page')
- #显示窗口
- w.show()
- '''
- 进入程序主循环,循环扫描响应在窗口上的事件,让整个程序不会退出
- 通过exit函数确保主循环安全结束
- '''
- sys.exit(app.exec_())
运行结果:
可视化工具 Qt designer的安装我就跳了,可以安装Qt(比anaconda大),而且anaconda自带了一个designer.exe,所以我就不下了, 苹果系统我就不说了,windows下在anaconda的library->bin下
但每次启动designer都从anaconda里找的话太麻烦,下面通过扩展工具来实现在pycharm直接启动designer
文件->设置->工具(最后一个)->外部工具
然后连着俩确定就完成了。
右键像下面那样找到启动就OK了,或者最上面一行Tools->External Tools里启动也行
启动之后报了拒绝访问的错误,如下:
发现路径不完整,要精确到exe文件才行!!!!!
之后,启动成功!
今天实训在教室玩了一上午,中途睡了一会,应该是昨天冻着了,昨晚躺在床上身上阵阵发冷,现在感觉有点活过来了,敲一波。
Spacer是间隔控件
示例:先在qt里随便拖几个控件,另存到pycharm的工作路径(右键你的py包,选择复制路径)下,把路径粘帖上,最后加上文件名就OK了。
可以看到已经存入
然后命令行下输入python -m PyQt5.uic.pyuic ui_test.ui -o ui_test.py
报错如下:
我将anaconda的环境变量调整到python的前面还是不行,参考这篇博客,可能我的anaconda环境还没激活,在pycharm的命令行下切换到anaconda的安装路径下的Scripts中,执行activate命令即可。
然后再回到工作目录执行刚才的命令即可。
转换成功!
相较于法一,还是法二更加方便些。
在anaconda的安装路径下\pkgs\pyqt-5.9.2-py37h6538335_2\Library\bin 里面有个pyuic5.bat文件,也就是可以直接用此命令将.ui文件转化为.py文件。
windows下添加外部工具(操作和上面差不多,参数配置略有不同)
pyuic配置:
program: python解释器(就是anaconda的安装路径下的python.exe路径)
arguments: -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
working directory: $FileDir$($FileDir$是在当前目录下将.ui文件生成.py文件,而$ProjectFileDir$是在总目录树下生成,这时就会产生空文件夹的报错问题。如果用后者的话就会遇到常见问题Error: No such file or directory: "ui_test.ui")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。