Проблема с Иконками в Toolbar
Не работают иконки, остаются просто кнопки. Не знаю в чем проблема? Прописывал путь полностью. Но все равно, ничего не работает.
Update: Файл main.py проекта находится на рабочем столе и папка FTP там же.
import sys
import ftplib
import easygui
import pyperclip
import os
from PyQt5 import Qt
from PyQt5 import QtCore, QtGui, QtWidgets, Qt
from PyQt5.QtWidgets import QWidget, QGridLayout, QPushButton, QGraphicsOpacityEffect
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QMenuBar, qApp
from PyQt5.QtWidgets import QFileSystemModel, QHBoxLayout, QShortcut, QInputDialog
from PyQt5.QtWidgets import QTreeWidgetItem, QVBoxLayout, QMenu, QSplitter
from PyQt5.QtCore import QUrl, QRect, QFileInfo, Qt, QSize, QDir
from PyQt5.QtGui import QIcon, QKeySequence, QImage
class App(QMainWindow):
def __init__(self):
super().__init__()
self.splitter = QSplitter(Qt.Horizontal)
self.hbox = QHBoxLayout()
self.hbox.addWidget(self.splitter)
central_widget = QWidget()
central_widget.setLayout(self.hbox)
self.setCentralWidget(central_widget)
self.columns = ['Name', 'Size']
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 server', self)
self.connectAction.setStatusTip('Connect server')
self.connectAction.triggered.connect(self.connect_FTP_server)
self.connectAction.triggered.connect(self.ftp_lst)
self.server.addAction(self.connectAction)
self.disconnectAction = QAction(QIcon('cross-exit.ico'), 'Disconnect server', self)
self.disconnectAction.setStatusTip('Disconnect server')
self.disconnectAction.triggered.connect(self.disconnect_FTP_server)
self.server.addAction(self.disconnectAction)
self.updateAction = QAction(QIcon('cross-exit.ico'), 'Update list file', self)
self.updateShortcut = QShortcut(QKeySequence("F5"), self)
self.updateShortcut.activated.connect(self.ftp_lst)
self.updateAction.setStatusTip('Update list file')
self.updateAction.triggered.connect(self.ftp_lst)
self.server.addAction(self.updateAction)
self.exitAction = QAction(QIcon(':\FTP\disconnect.png'), 'Exit')
self.exitAction.setShortcut('Ctrl+Q')
self.exitAction.triggered.connect(self.disconnect_FTP_server)
self.refreshAction = QAction(QIcon(':\FTP\refresh.png'), 'Refresh')
self.refreshAction.setShortcut('F5')
self.refreshAction.triggered.connect(self.ftp_lst)
self.tool = self.addToolBar('Tools')
self.tool.setIconSize(QSize(32, 32))
self.tool.addAction(self.refreshAction)
self.tool.addAction(self.exitAction)
self.FTP_tree = QtWidgets.QTreeWidget()
self.FTP_tree.setHeaderLabels(self.columns)
self.FTP_tree.setDisabled(True)
self.FTP_tree.itemDoubleClicked.connect(self.downloading_from_server)
self.splitter.addWidget(self.FTP_tree)
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.tree.clicked.connect(self.on_treeView_clicked)
self.tree.clicked.connect(self.uploading_files_to_server)
self.splitter.addWidget(self.tree)
@QtCore.pyqtSlot(QtCore.QModelIndex)
def on_treeView_clicked(self, index):
indexItem = self.model.index(index.row(), 0, index.parent())
self.filePath = self.model.filePath(indexItem)
if QFileInfo(self.filePath).completeSuffix() != '':
return self.filePath
else:
pass
def disconnect_FTP_server(self):
self.ftp.close()
self.FTP_tree.clear()
self.FTP_tree.setHeaderLabels(self.columns)
self.FTP_tree.setDisabled(True)
def word_getWelcome(self):
str1 = self.ftp.getwelcome()
self.words = str1.split()
def connect_FTP_server(self):
msg = "Введите информацию о сервере"
fieldNames = ["IP Сервера", "Логин", "Пароль"]
title = 'FTP'
self.ftp_log = easygui.multpasswordbox(msg, title, fieldNames)
try:
self.ftp = ftplib.FTP("192.168.0.1" ,"Artem" ,"1204")
self.ftp.encoding = 'utf-8'
self.ftp.set_pasv(False)
except TypeError:
pass
return self.ftp
def ftp_lst(self):
self.FTP_tree.clear()
self.FTP_tree.setHeaderLabels(self.columns)
self.FTP_tree.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.FTP_tree.customContextMenuRequested.connect(self.openMenu)
self.FTP_tree.setDisabled(False)
self.FTP_item1 = QTreeWidgetItem(self.FTP_tree, ['..'])
self.nlst = self.ftp.nlst()
self.nlst_len = len(self.nlst)
for i in self.nlst:
j = []
j.append(i)
j.append(str(self.ftp.size(i)))
self.FTP_item1 = QTreeWidgetItem(self.FTP_tree, j)
self.FTP_item1.setFlags(self.FTP_item1.flags() | QtCore.Qt.ItemIsEditable)
# self.splitter.addWidget(self.FTP_tree)
self.file_lst = self.ftp.nlst()
self.len_file_lst = len(self.nlst)
self.setLayout(self.hbox)
# self.FTP_tree = QtWidgets.QTreeWidget()
def openMenu(self, position):
self.position = position
self.menu = QtWidgets.QMenu()
self.delete = QtWidgets.QAction('Delete', self.menu)
self.menu.addAction(self.delete)
self.delete.triggered.connect(self.delete_file)
self.new_folder_open = QtWidgets.QAction('Create a folder and open', self.menu)
self.menu.addAction(self.new_folder_open)
self.new_folder_open.triggered.connect(self.newfolderopen)
self.copy_to_clipboard = QtWidgets.QAction('Copy to clipboard', self.menu)
self.menu.addAction(self.copy_to_clipboard)
self.copy_to_clipboard.triggered.connect(self.copytoclipboard)
self.new_folder = QtWidgets.QAction('New folder', self.menu)
self.menu.addAction(self.new_folder)
self.new_folder.triggered.connect(self.newfolder)
self.rename = QtWidgets.QAction('Rename', self.menu)
self.rename.triggered.connect(self.rename_file)
self.menu.addAction(self.rename)
if self.FTP_tree.itemAt(self.position) != None:
self.menu.exec_(self.FTP_tree.viewport().mapToGlobal(self.position))
else:
pass
def copytoclipboard(self):
a = f'ftp://{self.ftp_log[0]}{self.ftp.pwd()}/{self.FTP_tree.currentItem().text(0)}'
print(pyperclip.copy(a))
def newfolderopen(self):
text, ok = QInputDialog.getText(self, 'FTPZ',
'Enter a new folder name:')
a = self.FTP_tree.itemAt(self.position).text(0)
print(a)
if ok:
print(ok)
self.ftp.mkd(text)
b = f'{self.ftp.pwd()}/{text}'
self.ftp.cwd(b)
self.ftp_lst()
def newfolder(self):
text, ok = QInputDialog.getText(self, 'FTPZ',
'Enter a new folder name:')
a = self.FTP_tree.itemAt(self.position).text(0)
print(a)
if ok:
print(ok)
self.ftp.mkd(text)
self.ftp_lst()
def rename_file(self):
text, ok = QInputDialog.getText(self, 'FTPZ',
'Enter a new file name:')
a = self.FTP_tree.itemAt(self.position).text(0)
print(a)
if ok:
self.ftp.rename(a, text)
print(ok)
self.ftp_lst()
def delete_file(self):
self.name_file = self.FTP_tree.itemAt(self.position)
print(self.name_file)
self.ftp.delete(self.name_file.text(0))
self.ftp_lst()
def dwc(self):
url = self.ftp.pwd()
b = -2
while True:
if url[b] == '/':
c = url[:b]
break
else:
b -= 1
if c == '':
c = '/'
return c
def uploading_files_to_server(self):
f1 = open(self.filePath, "rb")
filename = QUrl(self.filePath).fileName()
self.ftp.storbinary("STOR" + filename, f1)
f1.close()
def downloading_from_server(self):
b = f'{self.ftp.pwd()}/{self.FTP_tree.currentItem().text(0)}'
c = QUrl(b).fileName()
if self.FTP_tree.currentItem().text(0) == '..':
self.ftp.cwd(self.dwc())
self.ftp_lst()
elif QFileInfo(c).completeSuffix() == '':
self.ftp.cwd(b)
self.ftp_lst()
else:
way = easygui.diropenbox()
host_file = os.path.join(
way, self.FTP_tree.currentItem().text(0)
)
try:
with open(host_file, 'wb') as local_file:
self.ftp.retrbinary('RETR ' + self.FTP_tree.currentItem().text(0), 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_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
у меня работает так:
import sys
import ftplib
import easygui
import pyperclip
import os
from PyQt5 import Qt
from PyQt5 import QtCore, QtGui, QtWidgets, Qt
from PyQt5.QtWidgets import QWidget, QGridLayout, QPushButton, QGraphicsOpacityEffect
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QMenuBar, qApp
from PyQt5.QtWidgets import QFileSystemModel, QHBoxLayout, QShortcut, QInputDialog
from PyQt5.QtWidgets import QTreeWidgetItem, QVBoxLayout, QMenu, QSplitter
from PyQt5.QtCore import QUrl, QRect, QFileInfo, Qt, QSize, QDir
from PyQt5.QtGui import QIcon, QKeySequence, QImage
class App(QMainWindow):
def __init__(self):
super().__init__()
self.splitter = QSplitter(Qt.Horizontal)
self.hbox = QHBoxLayout()
self.hbox.addWidget(self.splitter)
central_widget = QWidget()
central_widget.setLayout(self.hbox)
self.setCentralWidget(central_widget)
self.columns = ['Name', 'Size']
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 server', self)
self.connectAction.setStatusTip('Connect server')
self.connectAction.triggered.connect(self.connect_FTP_server)
self.connectAction.triggered.connect(self.ftp_lst)
self.server.addAction(self.connectAction)
self.disconnectAction = QAction(QIcon('cross-exit.ico'), 'Disconnect server', self)
self.disconnectAction.setStatusTip('Disconnect server')
self.disconnectAction.triggered.connect(self.disconnect_FTP_server)
self.server.addAction(self.disconnectAction)
self.updateAction = QAction(QIcon('cross-exit.ico'), 'Update list file', self)
self.updateShortcut = QShortcut(QKeySequence("F5"), self)
self.updateShortcut.activated.connect(self.ftp_lst)
self.updateAction.setStatusTip('Update list file')
self.updateAction.triggered.connect(self.ftp_lst)
self.server.addAction(self.updateAction)
# self.exitAction = QAction(QIcon(':\FTP\disconnect.png'), 'Exit')
self.exitAction = QAction(QIcon('c:/Users/User/Desktop/FTP/im.png'), 'Exit')
self.exitAction.setShortcut('Ctrl+Q')
self.exitAction.triggered.connect(self.disconnect_FTP_server)
# self.refreshAction = QAction(QIcon(':\FTP\refresh.png'), 'Refresh')
self.refreshAction = QAction(QIcon('c:/Users/User/Desktop/FTP/Ok.png'), 'Refresh')
self.refreshAction.setShortcut('F5')
self.refreshAction.triggered.connect(self.ftp_lst)
self.tool = self.addToolBar('Tools')
self.tool.setIconSize(QSize(32, 32))
self.tool.addAction(self.refreshAction)
self.tool.addAction(self.exitAction)
self.FTP_tree = QtWidgets.QTreeWidget()
self.FTP_tree.setHeaderLabels(self.columns)
self.FTP_tree.setDisabled(True)
self.FTP_tree.itemDoubleClicked.connect(self.downloading_from_server)
self.splitter.addWidget(self.FTP_tree)
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.tree.clicked.connect(self.on_treeView_clicked)
self.tree.clicked.connect(self.uploading_files_to_server)
self.splitter.addWidget(self.tree)
@QtCore.pyqtSlot(QtCore.QModelIndex)
def on_treeView_clicked(self, index):
indexItem = self.model.index(index.row(), 0, index.parent())
self.filePath = self.model.filePath(indexItem)
if QFileInfo(self.filePath).completeSuffix() != '':
return self.filePath
else:
pass
def disconnect_FTP_server(self):
self.ftp.close()
self.FTP_tree.clear()
self.FTP_tree.setHeaderLabels(self.columns)
self.FTP_tree.setDisabled(True)
def word_getWelcome(self):
str1 = self.ftp.getwelcome()
self.words = str1.split()
def connect_FTP_server(self):
msg = "Введите информацию о сервере"
fieldNames = ["IP Сервера", "Логин", "Пароль"]
title = 'FTP'
self.ftp_log = easygui.multpasswordbox(msg, title, fieldNames)
try:
self.ftp = ftplib.FTP("192.168.0.1" ,"Artem" ,"1204")
self.ftp.encoding = 'utf-8'
self.ftp.set_pasv(False)
except TypeError:
pass
return self.ftp
def ftp_lst(self):
self.FTP_tree.clear()
self.FTP_tree.setHeaderLabels(self.columns)
self.FTP_tree.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.FTP_tree.customContextMenuRequested.connect(self.openMenu)
self.FTP_tree.setDisabled(False)
self.FTP_item1 = QTreeWidgetItem(self.FTP_tree, ['..'])
self.nlst = self.ftp.nlst()
self.nlst_len = len(self.nlst)
for i in self.nlst:
j = []
j.append(i)
j.append(str(self.ftp.size(i)))
self.FTP_item1 = QTreeWidgetItem(self.FTP_tree, j)
self.FTP_item1.setFlags(self.FTP_item1.flags() | QtCore.Qt.ItemIsEditable)
# self.splitter.addWidget(self.FTP_tree)
self.file_lst = self.ftp.nlst()
self.len_file_lst = len(self.nlst)
self.setLayout(self.hbox)
# self.FTP_tree = QtWidgets.QTreeWidget()
def openMenu(self, position):
self.position = position
self.menu = QtWidgets.QMenu()
self.delete = QtWidgets.QAction('Delete', self.menu)
self.menu.addAction(self.delete)
self.delete.triggered.connect(self.delete_file)
self.new_folder_open = QtWidgets.QAction('Create a folder and open', self.menu)
self.menu.addAction(self.new_folder_open)
self.new_folder_open.triggered.connect(self.newfolderopen)
self.copy_to_clipboard = QtWidgets.QAction('Copy to clipboard', self.menu)
self.menu.addAction(self.copy_to_clipboard)
self.copy_to_clipboard.triggered.connect(self.copytoclipboard)
self.new_folder = QtWidgets.QAction('New folder', self.menu)
self.menu.addAction(self.new_folder)
self.new_folder.triggered.connect(self.newfolder)
self.rename = QtWidgets.QAction('Rename', self.menu)
self.rename.triggered.connect(self.rename_file)
self.menu.addAction(self.rename)
if self.FTP_tree.itemAt(self.position) != None:
self.menu.exec_(self.FTP_tree.viewport().mapToGlobal(self.position))
else:
pass
def copytoclipboard(self):
a = f'ftp://{self.ftp_log[0]}{self.ftp.pwd()}/{self.FTP_tree.currentItem().text(0)}'
print(pyperclip.copy(a))
def newfolderopen(self):
text, ok = QInputDialog.getText(self, 'FTPZ',
'Enter a new folder name:')
a = self.FTP_tree.itemAt(self.position).text(0)
print(a)
if ok:
print(ok)
self.ftp.mkd(text)
b = f'{self.ftp.pwd()}/{text}'
self.ftp.cwd(b)
self.ftp_lst()
def newfolder(self):
text, ok = QInputDialog.getText(self, 'FTPZ',
'Enter a new folder name:')
a = self.FTP_tree.itemAt(self.position).text(0)
print(a)
if ok:
print(ok)
self.ftp.mkd(text)
self.ftp_lst()
def rename_file(self):
text, ok = QInputDialog.getText(self, 'FTPZ',
'Enter a new file name:')
a = self.FTP_tree.itemAt(self.position).text(0)
print(a)
if ok:
self.ftp.rename(a, text)
print(ok)
self.ftp_lst()
def delete_file(self):
self.name_file = self.FTP_tree.itemAt(self.position)
print(self.name_file)
self.ftp.delete(self.name_file.text(0))
self.ftp_lst()
def dwc(self):
url = self.ftp.pwd()
b = -2
while True:
if url[b] == '/':
c = url[:b]
break
else:
b -= 1
if c == '':
c = '/'
return c
def uploading_files_to_server(self):
f1 = open(self.filePath, "rb")
filename = QUrl(self.filePath).fileName()
self.ftp.storbinary("STOR" + filename, f1)
f1.close()
def downloading_from_server(self):
b = f'{self.ftp.pwd()}/{self.FTP_tree.currentItem().text(0)}'
c = QUrl(b).fileName()
if self.FTP_tree.currentItem().text(0) == '..':
self.ftp.cwd(self.dwc())
self.ftp_lst()
elif QFileInfo(c).completeSuffix() == '':
self.ftp.cwd(b)
self.ftp_lst()
else:
way = easygui.diropenbox()
host_file = os.path.join(
way, self.FTP_tree.currentItem().text(0)
)
try:
with open(host_file, 'wb') as local_file:
self.ftp.retrbinary('RETR ' + self.FTP_tree.currentItem().text(0), 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_())
