注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Wei Ding blog

 
 
 

日志

 
 

pyqt5+eric6 openfile  

2016-07-24 20:11:56|  分类: python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

这里发不了图...,只好发
http://blog.csdn.net/boss212/article/details/52024539
刚刚接触pyqt和eric6,属于完全的无知状态,一个openfile的对话框,都费了我好多时间。
eric6的优点是UI和函数分离,一个py文件用来存放UI,如xxx_UI.py,然后一个xxx.py来存放具体的操作函数。
下面就以一个文件名字提取ui来说明一下。估计很多地方理解有误,请各位多多指教。
界面是在qt creator上拖出来的:

保存为browser2.ui,然后转到eric6Form界面,这里会出现一个这样的东东,

然后compile Form,之后
在sources界面,就会出现这样三个py文件

第一个,啥没有,别管了
第二个,Ui_browser2.py,这个是个负责生产Ui的py文件,里面的按钮可以点,但是无效。具体内容如下
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file '/home/capture/eric6_test/browser2/browser2.ui'
#
# Created by: PyQt5 UI code generator 5.4.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets
#第一句是从PyQt5里头import各个要用到的库
class Ui_Dialog(object):
#这个类的名称就叫做Ui_Dialog
    def setupUi(self, Dialog):
#定义函数setupUi,显然是个设置Ui各个参数的函数。self,就是setupUi自己,没啥好说的。
#Dialog这个,貌似不是普通的参数,如果没有猜错,应该是个函数,python运行将函数作为参数进行传递。
        Dialog.setObjectName("Dialog")
#用Dialog这个函数,在这里设置Object的名字
        Dialog.resize(400, 300)
#用Dialog这个函数,在这里设置了整一个框框的尺寸
        Dialog.setSizeGripEnabled(True)
#用Dialog这个函数,在这里设置Object是否使用grip
        self.widget = QtWidgets.QWidget(Dialog)
#在幕布里头加一个小框框widget
        self.widget.setGeometry(QtCore.QRect(70, 80, 281, 101))
#设置widget的坐标,x-start,x-end,y-start,y-end
        self.widget.setObjectName("widget")
#设置widget的名字
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
#设置一个layout,是一个横排的layout
        self.horizontalLayout.setObjectName("horizontalLayout")
#设置这个layout的名字
        self.browser2 = QtWidgets.QPushButton(self.widget)
#添加一个push button,并且用self.browser2来指代它
        self.browser2.setObjectName("browser2")
#给这个button弄个名字
        self.horizontalLayout.addWidget(self.browser2)
#把这个button包含到layout里头来
        self.lineEdit = QtWidgets.QLineEdit(self.widget)
#添加一个LineEdit,并且用self.lineEdit指代它
        self.lineEdit.setObjectName("lineEdit")
#给这个LineEdit添加一个名字
        self.horizontalLayout.addWidget(self.lineEdit)
#把这个LineEdite包含到layout里头来
#       self.browser2.raise_()
#使用raise抛出异常,当程序出现错误,通过raise显示地引发异常。一旦执行了raise语句,raise后面的语句将不能执行。       
#        self.lineEdit.raise_()
#使用raise抛出异常,当程序出现错误,通过raise显示地引发异常。一旦执行了raise语句,raise后面的语句将不能执行。     
        self.retranslateUi(Dialog)
#retranslateUi是个自己定义函数,目的是进行字符转换,讲pushbutton的上的文字重现在Ui上,见下面的def retranslateUi
        QtCore.QMetaObject.connectSlotsByName(Dialog)
#网上百度到的说明:其作用是如其名称一样,用来将de>de>Dialog里的子孙de>de>Dialog的某些信号按照其objectName连接到相应的槽上,如 button_hello.setObjectName("hello_button")
# 官网解释用法: http://doc.qt.io/qt-5/qmetaobject.html#connectSlotsByName
#上面这一段是抄人家的。
de>

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.browser2.setText(_translate("Dialog", "browser2"))

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
#调用QtWidgets.QApplication,并且把系统参数输入过去
    Dialog = QtWidgets.QDialog()
#用Dialog来代替QtWidgets.QDialog
    ui = Ui_Dialog()
#用ui代替类Ui_Dialog
    ui.setupUi(Dialog)
#调用Ui_Dialog的setupUi函数
    Dialog.show()
#调用QtWidgets.QDialog的show函数
    sys.exit(app.exec_())
#退出系统

第三个browser2.py,则是所以按钮的功能函数,内容如下
# -*- coding: utf-8 -*-

"""
Module implementing BROWSER2.
"""

from PyQt5 import  QtWidgets
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QDialog
from PyQt5.QtWidgets import QFileDialog
from Ui_browser2 import Ui_Dialog
#从Ui_browser2里头,导入Ui_Dialog函数
class BROWSER2(QDialog, Ui_Dialog):
#定义一个叫BROWSER2的类,传过来的参数9(实际上是函数),有两个,一个是系统自带的QDialog,一个是前面那个py脚本里头的Ui_Dialog函数
    """
    Class documentation goes here.
    """
    def __init__(self, parent=None):
        """
        Constructor
       
        @param parent reference to the parent widget (QWidget)
        """
        super(BROWSER2, self).__init__(parent)
        #这里的super是个类,作用是把父辈的类交给子辈,这就是为什么后面的selft.setupUi和self.lineEdit.setText可以直接用
        #详细的讲解见:http://www.jb51.net/article/66912.htm
        self.setupUi(self)
        #调用出Ui界面设置选项,那就不用再写一便了。
   
    @pyqtSlot()
    #把之前的signal-slot也调用进来
    def on_browser2_clicked(self):
#定义文件名获取函数
        #self.setupUi(self)
        file_name, file_type=QFileDialog.getOpenFileName(self,"Open file dialog","/","Python files(*.py)")   
#获取后缀为py的文件的文件名
        self.lineEdit.setText(str(file_name)) 
#把文件名+路径赋值给lineEdit中
        # TODO: not implemented yet
       
if __name__ == "__main__":
    import sys
    app =QtWidgets.QApplication(sys.argv)
    form=BROWSER2()   
    form.show()   
    app.exec_()
  评论这张
 
阅读(35)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017