дерево каталогов, и список файлов в PyQt5
Нужно вставить дерево каталогов, и список файлов, в приложение на PyQt5, в документации не нашел. Может кто-то знает как релизовать(скриншоты ниже)
import sys
import ftplib
import easygui
from PyQt5.QtWidgets import QWidget, QGridLayout, QPushButton, QGraphicsOpacityEffect
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QMenuBar
from PyQt5.QtCore import QUrl, QRect
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()
# ++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.menubar = QMenuBar(self)
self.file = self.menubar.addMenu('&Опции')
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.ftp_lst()
self.a = None
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)
self.show()
def update(self):
self.ftp_lst()
def on_click(self):
a = self.sender()
ftp.cwd(f'{ftp.pwd()}/{a.text()}')
self.update()
print(ftp.pwd())
print(a.text())
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())```
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
У меня нет некоторых модулей, с которыми вы работаете,
поэтому я кое что закомментировал.
Раскомментируйте строки помеченные # #@
Я не вижу общего дизайна вашего приложения, поэтому вставьте
self.grid.addWidget(self.tree, ...)
где вам надо.
import sys
import ftplib
#@ import easygui # #@
from PyQt5 import QtCore, QtGui, QtWidgets # +++
from PyQt5.QtWidgets import QWidget, QGridLayout, QPushButton, QGraphicsOpacityEffect
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QMenuBar
from PyQt5.QtCore import QUrl, QRect
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
self.menubar = QMenuBar(self)
self.file = self.menubar.addMenu('&Опции')
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.ftp_lst() # #@
self.a = None
# ++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.model = QtWidgets.QFileSystemModel()
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)
# ? self.show()
def update(self):
self.ftp_lst()
def on_click(self):
a = self.sender()
ftp.cwd(f'{ftp.pwd()}/{a.text()}')
self.update()
print(ftp.pwd())
print(a.text())
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
ex.resize(640, 480) # +
ex.show() # +++ !!!
sys.exit(app.exec_())


