Дерево каталогов и список файлов для FTP сервера

Делаю FTP client на PyQt5, python. И мне надо сделать дерево каталогов и список файлов для FTP сервера. Как делать с локалкой я разобрался. А как сделать на удаленном сервере не понимаю. Просьба помочь:)

import sys
import ftplib
import easygui 
import os
from PyQt5 import QtCore, QtGui, QtWidgets                                
from PyQt5.QtWidgets import QWidget, QGridLayout, QPushButton, QGraphicsOpacityEffect
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QMenuBar, QFileSystemModel
from PyQt5.QtCore import QUrl, QRect, QFileInfo
from PyQt5.QtGui import QIcon

# msg = "Введите информацию о сервере"
# fieldNames = ["IP Сервера", "Логин", "Пароль"]
# title = 'FTP' 
# ftp_log = easygui.multpasswordbox(msg, title, fieldNames)

ftp = ftplib.FTP('192.168.0.1', 'Artem', '1204')                        

# ftp.cwd('/disk1_1')


class App(QWidget):
    def __init__(self):
        super().__init__()

        self.grid = QGridLayout(self)                                      

        self.menubar = QMenuBar(self)
        self.file = self.menubar.addMenu('&file')
        self.exitAction = QAction(QIcon('cross-exit.ico'), '&Exit', self)
        self.exitAction.setShortcut('Ctrl+Q')
        self.exitAction.setStatusTip('Exit application')
        self.exitAction.triggered.connect(self.close)
        self.file.addAction(self.exitAction)    

        self.server = self.menubar.addMenu('&server')
        self.connectAction = QAction(QIcon('cross-exit.ico'), '&Connect', self)
        self.exitAction.setStatusTip('Connect server')
        self.server.addAction(self.connectAction) 

        self.ftp_lst()                                                    
        self.a = None   


        self.model = QFileSystemModel(self)
        self.model.setRootPath('')
        self.tree = QtWidgets.QTreeView()
        self.tree.setModel(self.model)
        self.tree.setAnimated(False)
        self.tree.setIndentation(20)
        self.tree.setSortingEnabled(True)
        self.grid.addWidget(self.tree, 111, 0, alignment=QtCore.Qt.AlignBottom)    


    def ftp_lst(self):
        self.file_lst = ftp.nlst()
        self.len_file_lst = len(ftp.nlst())
        self.setLayout(self.grid)
        positions = [(i,j) for i in range(self.len_file_lst) for j in range(1)]
        for position, name in zip(positions, self.file_lst):
            if name == '':
                continue
            self.button = QPushButton(name)
            self.grid.addWidget(self.button, *position)
            self.button.clicked.connect(self.on_click)


    def update(self):
        self.ftp_lst()

    def on_click(self):
        a = self.sender()
        b = f'{ftp.pwd()}/{a.text()}'
        c = QUrl(b).fileName()
        print(ftp.pwd())
        print(QFileInfo(c).completeSuffix())
        if QFileInfo(c).completeSuffix() == '':
            ftp.cwd(b)  
            self.update()
        else:
            way = easygui.diropenbox()
            host_file = os.path.join(
                way, a.text()
            )

            try:
                with open(host_file, 'wb') as local_file:
                    ftp.retrbinary('RETR ' + a.text(), local_file.write)
            except ftplib.error_perm:
                pass


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    ex.resize(640, 480)                    
    ex.show()                              
    sys.exit(app.exec_())```

Ответы (0 шт):