今天用pycharm配置了下PyQt5的环境,搜了下教程,搞完发现报错。所以这里记录下正确的配制方法。
个人建议UI设计与逻辑功能分开
环境:Windows10
1. 安装Pycharm
这个不需要多说,按网上的教程安装,装社区版免费,专业版需要激活,怕麻烦就装社区版,也足够用了。安装完后配置Python环境,这里也不多说。上张图:
这里我是选择的Python官方的编译器,装在了d盘。可以根据需要自行修改路径。
2. 安装pyQt 5
二种安装方式,一种是点击上图中的步骤5的“+”号选择PyQt进行安装。
还有一种在cmd中直接pip安装或者下好之后装。推荐换源之后再装PyQt挺大的,官方源容易报错。换源的话需在电脑Appdata文件夹里新建pip文件夹,在pip文件夹内新建文件pip.ini,以记事本形式打开,然后敲:
[global]
timeout = 6000
index-url = http://pypi.douban.com/simple
trusted-host = pypi.douban.com
所以这是个豆瓣的源。速度会快很多。
安装你需要:
pip install PyQt5
pip install PyQt5-tools
一般来说装这俩个就够了。但如果想用Eric6,当我没说。
我是已经装好PyQt5了的。
- 配置环境
接下来配置pycharm.
- 打开设置:
当然你可以现将整个软件Pycharm先设置为你自己习惯或者舒适的风格,这里不做介绍,自行百度。
- 打开tools(工具),选择External Tools(扩展包)
你会发现右侧空白,除了一个“+”号,然后点它添加扩展包。当然这里我市已经添加好了的,所以和你略有不同。如下图:
做完步骤4,点击“+”号后会出现:
接下来开始填写:
Name: QtDesigner
Program: 选择designer.exe的目录(一般来说,在你Python安装目录下的\Lib\site-packages\pyqt5-tools\designer.exe。安装的第三方库一般都在Lib文件夹下site-packages文件夹中。装完PyQt5,和PyQt-tools后,该目录下至少会有这俩个文件夹)。我的目录是:D:\Programs\Python\Python36\Lib\site-packages\pyqt5-tools\designer.exe,根据自己情况修改。看下图,找到它:
Arguments: $FileName$
(复制吧,也可以自己选择insert插入,这样保证已经生成的ui文件直接用designer直接打开)
Working directory: $FileDir$
(路径设置,同样可以直接复制,选完program后会把它当默认路径而不是工程路径,这个参数会让路径转为工程路径)
额,上张我配置完Qtdesigner后的图:
OK,至此Qtdesigner添加成功。同样的,接下来添加Pyuic5,这个是用来将UI文件转为py文件的。先上图,最终配置图如下:
Name: Pyuic5(其实名字随你,你自己懂就行了)
Program: 这里选的是你Python安装目录,找到python.exe(例如我的是D:\Programs\Python\Python36\python.exe)
Arguments: -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
Working directory: $FileDir$
(这样保证转换的文件是在你的工程目录下的,否则是其他目录)
当然,我这里多了个pyrcc,这个是资源文件转码用到的,我没测试过自己这个对不对就不介绍了。
搞定,接下来测试!
- 测试
打开designer,如果不知道怎么打开,请前往Python路径site-packages文件夹中找到相关的库(pyqt5-tools),点击designer(可以创建个快捷方式,这样使用更方便)。
先1后2,新建一个主窗口,点击Type here ,改为”文件(&F)”和”编辑(&E)”,enter确定。
然后在文件下新建一个子菜单,注意有可能子菜单不支持中文,可以空格输入,然后再右下方属性框里修改Text名字,将该子菜单名改为关闭,并将其对象名objectname改为fileCloseAction,因为对象名称是逻辑功能调用使用的名称,修改后让它更加可读。如下图:
然后,将ui文件转为py文件。
在项目中添加该ui文件,选择该UI文件,单击右键,选择Extenal Tools,然后选择pyuic5,即可在目录下生成相应py文件。如下图:
我的UI文件没有命名,即默认的untitled,生成的py文件会同名。看看生成的py文件,如下图:
代码如下:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.11.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
self.menubar.setObjectName("menubar")
self.menuBar1 = QtWidgets.QMenu(self.menubar)
self.menuBar1.setObjectName("menuBar1")
self.fileEditAction = QtWidgets.QMenu(self.menubar)
self.fileEditAction.setObjectName("fileEditAction")
MainWindow.setMenuBar(self.menubar)
self.fileCloseAction = QtWidgets.QAction(MainWindow)
self.fileCloseAction.setObjectName("fileCloseAction")
self.menuBar1.addAction(self.fileCloseAction)
self.menubar.addAction(self.menuBar1.menuAction())
self.menubar.addAction(self.fileEditAction.menuAction())
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.menuBar1.setTitle(_translate("MainWindow", "文件(&F)"))
self.fileEditAction.setTitle(_translate("MainWindow", "编辑(&E)"))
self.fileCloseAction.setText(_translate("MainWindow", "关闭"))
它生成一个类,相应的我们只需要在另一个文件中调用这个类就可以生成我们所需的界面的。
下面我们显示这个界面:
from untitled import Ui_MainWindow
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
class myForm(QMainWindow,Ui_MainWindow):
def __init__(self):
super(myForm,self).__init__()
self.setupUi(self)
self.fileCloseAction.triggered.connect(self.close)
if __name__=="__main__":
app=QApplication(sys.argv)
win=myForm()
win.show()
sys.exit(app.exec_())
然后出现:
单击关闭会退出这个界面!
希望能给你们帮助,也给自己提个醒!!!