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

# -*- 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_()
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值