您的位置:首页 > 编程语言 > Qt开发

【PyQt4 实例22】实现ftp的上传和下载

2014-10-11 16:17 441 查看
# -*- coding: utf-8 -*-
#另外友情说明一下,如果要测试,可以用webpy框架搭建一个服务器。
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys
from PyQt4.QtNetwork import *

QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))

class FtpClient(QDialog):
def __init__(self,parent=None):
super(FtpClient,self).__init__(parent)
self.setWindowTitle(self.tr("实现Ftp上传和下载"))

vbMain = QVBoxLayout(self)

hb1 = QHBoxLayout()
LabelServer = QLabel(self)
LabelServer.setText(self.tr("服务器地址:"))
self.LineEditServer = QLineEdit(self)
hb1.addWidget(LabelServer)
hb1.addWidget(self.LineEditServer)

hb2 = QHBoxLayout()
UserName = QLabel(self)
UserName.setText(self.tr("用户名:"))
self.LineEditUser = QLineEdit(self)
hb2.addWidget(UserName)
hb2.addWidget(self.LineEditUser)

hb3 = QHBoxLayout()
PasswordName = QLabel(self)
PasswordName.setText(self.tr("密码:"))
self.LineEditPassword = QLineEdit(self)
hb3.addWidget(PasswordName)
hb3.addWidget(self.LineEditPassword)

hb4 = QHBoxLayout()

self.PushButtonLogin = QPushButton(self)
self.PushButtonLogin.setText(self.tr("登录"))
hb4.addWidget(self.PushButtonLogin)

hb5 = QHBoxLayout()

self.PushButtonPut = QPushButton(self)
self.PushButtonPut.setText(self.tr("上传"))

self.PushButtonGet = QPushButton(self)
self.PushButtonGet.setText(self.tr("下载"))

hb5.addWidget(self.PushButtonPut)
hb5.addWidget(self.PushButtonGet)

vbMain.addLayout(hb1)
vbMain.addLayout(hb2)
vbMain.addLayout(hb3)
vbMain.addLayout(hb4)
vbMain.addLayout(hb5)

self.connect(self.PushButtonLogin,SIGNAL("clicked()"),self.slotLogin)
self.connect(self.PushButtonPut,SIGNAL("clicked()"),self.slotPut)
self.connect(self.PushButtonGet,SIGNAL("clicked()"),self.slotGet)

self.curStatus = ""
self.localFile = QFile()
self.remoteFileName = QFile()

self.PushButtonPut.setEnabled(False)
self.PushButtonGet.setEnabled(False)
    def slotLogin(self):
        serverAddress = self.LineEditServer.text()
        if serverAddress.isEmpty():
            QMessageBox.warning(self,self.tr("error"),self.tr("Please input server address!"))
            return
        userName = self.LineEditUser.text()
        if userName.isEmpty():
            QMessageBox.warning(self,self.tr("error"),self.tr("Please input user name!"))
            return
        password = self.LineEditPassword.text()
        if password.isEmpty():
            QMessageBox.warning(self,self.tr("error"),self.tr("Please input Passwrod!"))
            return
        self.ftpClient = QFtp()
        self.ftpClient.connectToHost(serverAddress)
        
        self.connect(self.ftpClient,SIGNAL("stateChanged(int)"),self.slotStateChanged)
        self.connect(self.ftpClient,SIGNAL("done(bool)"),self.slotDone)
        
        self.ftpClient.login(userName,password)
        self.curStatus =  "LOGIN"
        
    
    def slotStateChanged(self,state):
        if state == QFtp.LoggedIn:
            self.PushButtonPut.setEnabled(True)
            self.PushButtonGet.setEnabled(True)
    
    def slotPut(self):
        OK = False
        fileName,OK = QInputDialog.getText(self,self.tr("Put File:"),self.tr("Please input file name:"),QLineEdit.Normal,QString())
        if OK and not fileName.isEmpty():
            self.remoteFileName = QFile(fileName)
            self.ftpClient.put(self.remoteFileName,fileName)
        self.curStatus = "PUT"
    
    def slotGet(self):
        OK = False
        fileName,OK = QInputDialog.getText(self,self.tr("Get File:"),self.tr("Please input file name:"),QLineEdit.Normal,QString())
        if OK and not fileName.isEmpty():
            self.localFile = QFile(fileName)
            self.localFile.open(QIODevice.WriteOnly)
            self.ftpClient.get(fileName,self.localFile)
        self.curStatus = "GET"
        
    
    def slotDone(self,error):
        if error:
            QMessageBox.warning(self,self.tr("error"),self.ftpClient.errorString())
            return
        if self.curStatus == "LOGIN":
            self.PushButtonLogin.setEnabled(False)
            self.curStatus = "None"
        if self.curStatus == "PUT":
            QMessageBox.warning(self,self.tr("succeed"),self.tr("Put file succeed!"))
            self.curStatus = "None"
        if self.curStatus == "GET":
            self.localFile.close()
            QMessageBox.warning(self,self.tr("succeed"),self.tr("Get file succeed!"))
            self.curStatus = "None"
        
        
app=QApplication(sys.argv)
dialog=FtpClient()
dialog.show()
app.exec_()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: