首页 > 代码库 > python 初学03 Eric+PyQt+python IDE与界面程序

python 初学03 Eric+PyQt+python IDE与界面程序

近期一直在学习python和批处理,来将工作中的手工操作的低效环节用脚本自动实现。

已经实现了几个脚本。但是命令行窗口,总是不太友好,对执行结果的反馈也不清楚,就想实现可视化。

在网上找到Python可视化的编程的一个方法,周末专心实现了一下,效果还行,算是有头绪了。

 

http://blog.sina.com.cn/s/blog_514104fc0101c8yi.html

主要是按照上面这篇博客的方法实现的。感谢作者。

 

一、环境与软件版本

Eric特别挑软件版本,与PyQt 和 python的版本都要对应。

在网上搜索,以及自己安装尝试,验证Win7 64可用的软件版本配合为:

[Python3.3.2] + [PyQt4-4.10.2-gpl-Py3.3-Qt4.8.4-x64] + [Eric5.4.5]

 

二、实现的效果

输入路径,点击“文件列表”,会在文本框中显示文件列表。这是为下一步进行文件处理打基础。

点击“清空”,清空路径与文本框。

点击“退出”,关闭程序。

 

三、源码

 1 # -*- coding: utf-8 -*- 2  3 # Form implementation generated from reading ui file ‘E:\SVN\branches\Python\HW\helloworld.ui‘ 4 # 5 # Created: Mon Jul 28 00:06:20 2014 6 #      by: PyQt4 UI code generator 4.10.2 7 # 8 # WARNING! All changes made in this file will be lost! 9 10 from PyQt4 import QtCore, QtGui11 12 try:13     _fromUtf8 = QtCore.QString.fromUtf814 except AttributeError:15     def _fromUtf8(s):16         return s17 18 try:19     _encoding = QtGui.QApplication.UnicodeUTF820     def _translate(context, text, disambig):21         return QtGui.QApplication.translate(context, text, disambig, _encoding)22 except AttributeError:23     def _translate(context, text, disambig):24         return QtGui.QApplication.translate(context, text, disambig)25 26 class Ui_Dialog(object):27     def setupUi(self, Dialog):28         Dialog.setObjectName(_fromUtf8("Dialog"))29         Dialog.resize(541, 300)30         Dialog.setSizeGripEnabled(True)31         self.LText = QtGui.QLineEdit(Dialog)32         self.LText.setGeometry(QtCore.QRect(110, 20, 371, 21))33         self.LText.setObjectName(_fromUtf8("LText"))34         self.btn3 = QtGui.QPushButton(Dialog)35         self.btn3.setGeometry(QtCore.QRect(20, 210, 75, 23))36         self.btn3.setObjectName(_fromUtf8("btn3"))37         self.BText = QtGui.QTextBrowser(Dialog)38         self.BText.setGeometry(QtCore.QRect(110, 60, 371, 211))39         self.BText.setObjectName(_fromUtf8("BText"))40         self.btn1 = QtGui.QPushButton(Dialog)41         self.btn1.setGeometry(QtCore.QRect(20, 90, 75, 23))42         self.btn1.setObjectName(_fromUtf8("btn1"))43         self.btn2 = QtGui.QPushButton(Dialog)44         self.btn2.setGeometry(QtCore.QRect(20, 150, 75, 23))45         self.btn2.setObjectName(_fromUtf8("btn2"))46         self.label = QtGui.QLabel(Dialog)47         self.label.setGeometry(QtCore.QRect(40, 20, 51, 16))48         font = QtGui.QFont()49         font.setFamily(_fromUtf8("微软雅黑"))50         font.setPointSize(14)51         self.label.setFont(font)52         self.label.setObjectName(_fromUtf8("label"))53 54         self.retranslateUi(Dialog)55         QtCore.QObject.connect(self.btn3, QtCore.SIGNAL(_fromUtf8("clicked()")), Dialog.close)56         QtCore.QMetaObject.connectSlotsByName(Dialog)57 58     def retranslateUi(self, Dialog):59         Dialog.setWindowTitle(_translate("Dialog", "Dialog", None))60         self.btn3.setText(_translate("Dialog", "退出", None))61         self.btn1.setText(_translate("Dialog", "文件列表", None))62         self.btn2.setText(_translate("Dialog", "清空", None))63         self.label.setText(_translate("Dialog", "路径:", None))64 65 66 if __name__ == "__main__":67     import sys68     app = QtGui.QApplication(sys.argv)69     Dialog = QtGui.QDialog()70     ui = Ui_Dialog()71     ui.setupUi(Dialog)72     Dialog.show()73     sys.exit(app.exec_())
UI Code
 1 # -*- coding: utf-8 -*- 2  3 """ 4 Module implementing Dialog. 5 """ 6  7 from PyQt4.QtCore import pyqtSlot 8 from PyQt4.QtGui import QDialog 9 10 from Ui_helloworld import Ui_Dialog11 #import the module12 import PyQt4,  PyQt4.QtGui,  sys,  os13 14 class Dialog(QDialog, Ui_Dialog):15     """16     Class documentation goes here.17     """18     def __init__(self, parent=None):19         """20         Constructor21         22         @param parent reference to the parent widget (QWidget)23         """24         super().__init__(parent)25         self.setupUi(self)26                 27     @pyqtSlot()28     def on_btn1_clicked(self):29         """30         Slot documentation goes here.31         """32         destdir = self.LText.text()33         #fix the bug34         buglist = [C:,  D:,  E:,  F:,  G:,  H:,  I:,  J:,  K:,  X:,  Y:,  Z:]35         if destdir.upper() in buglist:36             destdir = destdir + /37             38         #if the path does not exists or is null 39         if not os.path.exists(destdir) or destdir == "":40            destdir = os.getcwd()41            filestr = "请输入有效路径!"42            self.BText.setText(filestr)43         #else44         else:45             filestr = "文件列表:"46             filelist= os.listdir(destdir)47             for file in filelist:48                 filestr = filestr + \n + str(file)49             self.BText.setText(filestr)50         51     @pyqtSlot()52     def on_btn2_clicked(self):53         """54         Slot documentation goes here.55         """56         # TODO: not implemented yet57 58         #clean the LineEdit and the TextBrowser59         textempty = ""60         self.BText.setText(textempty)61         self.LText.setText(textempty)62 if __name__ == "__main__":63     app = PyQt4.QtGui.QApplication(sys.argv)64     dlg = Dialog()65     dlg.show()66     sys.exit(app.exec())67     
Func Code


四、学到的

1.对于界面上对象属性的处理,要对过界面对象实现。比对,我先将LineEdit中输入的值,赋给一个变量,然后在TextBrowser中显示,尝试失败。

 

五、待改进

程序运行时,tab顺序正好位于“退出”上,敲回车直接退出程序了,没有找到好的方法来使tab顺序位于“文件列表”上,这样输入路径后敲回车即可。

 

六、BUG

1.使用Generage Dialog Code生成代码,其中有一行需要修改。from .Ui_helloworld import Ui_Dialog 多了一个点,要去掉。

2.当路径是程序所在盘的盘符时(如e: 或 E: 不带斜杠),python判断路径不存在。而路径带上斜杠(为e:\或E:\ 时),一切正常。其他盘不受影响,带不带斜杠均可。目前用一个判断,统一给加上“/”