pyqt笔记
忙了一天,终于将pyqt的环境配置好,并且用ui整出第一个图形界面,虽然之前用过C++和python的tkinter写过界面,但能将界面显示出来,证明一天的努力没有白费,现将今天的成果总结一下。
1.环境配置问题:
这是整个过程中遇到的第一个,也是花费时间最多的问题,我用的是pycharm社区版,python的版本是2.7.13,系统是win7 64位,按照一般的方法,安装python库的方法是打开pycharm->seting->工程项目名->project Interpreter里面的pip来搜索包并安装,但这次却失败了,我认为是和我的电脑装有两个版本的python有关吧。另外一个是python3.5.3版本
在cmd里面输入pip2 install PyQt4显示是安装失败,无匹配版本,这让我很抓狂。而且对于两个版本python的pip冲突问题我没有什么好的办法。
上网查了资料,很多文章都是让先下载sip,然后用VS的命令行Windows Desktop Command Prompts来编译,再安装PyQt4,我按这个方法折腾很久,一开始是找不到VS这个工具,我的是2015,网上的都是2010,图形菜单这些是不一样的,折腾一段时间后在开始菜单的Visual Studio Tools找到了它,且为选择那个版本的工具来编译sip纠结一阵,最终我决定每个版本都试一下,它编译的方法是先解压sip的压缩包,再到cmd(不是VS那个工具)上用cd +sip文件夹路径转到那个目录,再用python
configure.py那个文件,然后打开vs的工具,我的VS安装在D盘,而那个文件夹目录是在C盘python的目录下,开始我不知道如何转到那个目录,用cd +目录名是没办法的,最后先输入C:\,切换到C盘后再用cd 命令,再用nmake
nmake install
编译后并没有什么用,而且编译过程中它显示了很多错误信息。经过一番折腾我不得不放弃这个方法,后来又查到另外一篇文章说直接安装PyQt即可,于是我就去它提供的网站下载了对应版本的PyQt
http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.10.3/PyQt4-4.10.3-gpl-Py2.7-Qt4.8.5-x64.exe
下载一路next安装完成即可,
添加QTDesgner Tool
打开PyCharm的Settings,Search “tools” & select “External Tools”
点击”+” 号,添加QT Designer External Tools
1).设置“Qt Designer” -- 这个主要用来设计 Qt界面
在Qt Designer的设置中,Program选择PyQt安装目录中 designer.exe 的路径
Work directory 使用变量 $ProjectFileDir$ (点击后面的 Insert macro 按钮可以不用输入双击上屏)2).设置“PyUIC” -- 这个主要是用来将 Qt界面
转换成 py代码
还有脚本的设置
C:\Python27\Lib\site-packages\PyQT4\uic\pyuic.py $FileName$ -o $FileNameWithoutExtension$.py
那个C:\Python27是我Python安装的路径,把上面的Python路径修改成自己的即可
Work directory 使用变量 $ProjectFileDir$
注意python的版本和PyQt的版本要一致,否则会出现错误。
而在配置好环境,将ui转成.py文件时,生成的.py文件要加上这些
代码开头加import sys
末尾加
app = QtGui.QApplication(sys.argv)
win = Ui_MainWindow()
win.show()
最后结果
这是我的ui转换后的代码
# Form implementation generated from reading ui file 'untitled.ui' # # Created: Sun Aug 13 22:46:53 2017 # by: PyQt4 UI code generator 4.10.3 # # WARNING! All changes made in this file will be lost! import sys from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: def _fromUtf8(s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig, _encoding) except AttributeError: def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig) class Ui_MainWindow(QtGui.QMainWindow): def setupUi(self, MainWindow): MainWindow.setObjectName(_fromUtf8("MainWindow")) MainWindow.resize(800, 600) self.centralwidget = QtGui.QWidget(MainWindow) self.centralwidget.setObjectName(_fromUtf8("centralwidget")) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23)) self.menubar.setObjectName(_fromUtf8("menubar")) MainWindow.setMenuBar(self.menubar) self.statusbar = QtGui.QStatusBar(MainWindow) self.statusbar.setObjectName(_fromUtf8("statusbar")) MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) def __init__(self):super(Ui_MainWindow, self).__init__() app = QtGui.QApplication(sys.argv) win = Ui_MainWindow() win.show() app.exec_()Done!