Добавление menuBar

Нужно добавить menuBar в код(ниже). Не понимаю как это сделать.

import ftplib
import sys
import easygui

from PyQt5.QtWidgets import QWidget, QGridLayout, QPushButton, QGraphicsOpacityEffect
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication
from PyQt5.QtCore import QUrl
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.ftp_lst()
        self.a()

    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

Попробуйте так:

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.menubar.setGeometry(QRect(0, 0, 766, 26))
        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()                                                      # ---
        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()
    ex.resize(600, 400)                                             # +
    ex.show()                                                       # +++
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка