Не отображается QMenuBar PyQt5
Проблема такая. Написал текстовый редактор на PyQt5, писал на MacOs, там всё работает отлично, но на линуксе и виндовс не отображается QMenuBarтекст курсивом.
Заранее спасибо!
class CodeEditor(QPlainTextEdit, QMainWindow):
def __init__(self):
super().__init__()
super(CodeEditor, self).__init__()
al = self.CheckConfig()
# Var
self.file_name = ''
self.text_size = 16
self.mode_type = 0
self.setFont(QFont("Times New Roman", self.text_size))
self.setLineWrapMode(QPlainTextEdit.NoWrap)
self.currentLineNumber = True
self.currentLineColor = self.palette().alternateBase()
self.setTabStopDistance(16)
self.setTabStopWidth(16)
# self.setWindowIcon(QIcon('icon.png'))
self.setWindowTitle("Code Editor Lite | untitled | Normal Mode")
self.cursorPositionChanged.connect(self.highligtCurrentLine)
self.number_bar = self.NumberBar(self)
# Новый файл
self.newfile = QAction('&Новый файл (Ctrl+N)', self)
self.newfile.setToolTip('Ctrl+N')
self.newfile.triggered.connect(self.NewfileAction)
self.newfile_sc = QShortcut(QKeySequence("Ctrl+N"), self)
self.newfile_sc.activated.connect(self.NewfileAction)
# Открыть файл
self.openfile = QAction('&Открыть файл (Ctrl+O)', self)
self.openfile.setStatusTip('Ctrl+O')
self.openfile.triggered.connect(self.OpenfileAction)
self.openfile_sc=QShortcut(QKeySequence("Ctrl+O"), self)
self.openfile_sc.activated.connect(self.OpenfileAction)
# Сохранить как
self.saveAsfile = QAction('&Сохранить как... (Shift+Ctrl+S)', self)
self.saveAsfile.setStatusTip("Shit+Ctrl+S")
self.saveAsfile.triggered.connect(self.SaveAsfileAction)
self.saveAsfile_sc = QShortcut(QKeySequence.StandardKey.SaveAs, self)
self.saveAsfile_sc.activated.connect(self.SaveAsfileAction)
# Сохранить
self.savefile = QAction('&Сохранить (Ctrl+S)', self)
self.savefile.setStatusTip('Ctrl+S')
self.savefile.triggered.connect(self.SavefileAction)
self.savefile_sc = QShortcut(QKeySequence("Ctrl+S"), self)
self.savefile_sc.activated.connect(self.SavefileAction)
# Выход
self.exitfrom = QAction('&Выход (Ctrl+Q)', self)
self.exitfrom.setStatusTip('Ctrl+Q')
self.exitfrom.triggered.connect(self.ExitAction)
self.exitfrom_sc = QShortcut(QKeySequence("Ctrl+Q"), self)
self.exitfrom_sc.activated.connect(self.ExitAction)
# Увеличение
self.plus = QAction('&Увеличить (Ctrl+Shift+Plus)', self)
self.plus.setStatusTip("Ctrl+Shift+Plus")
self.plus.triggered.connect(self.PlusAction)
self.plus_sc = QShortcut(QKeySequence.StandardKey.ZoomIn, self)
self.plus_sc.activated.connect(self.PlusAction)
# Уменьшение
self.minus = QAction("&Уменьшить (Ctrl+Minus)", self)
self.minus.setStatusTip("Ctrl+Minus")
self.minus.triggered.connect(self.MinusAction)
self.minus_sc = QShortcut(QKeySequence.StandardKey.ZoomOut, self)
self.minus_sc.activated.connect(self.MinusAction)
# Помощь
self.helptext = QAction('&Справка', self)
self.helptext.triggered.connect(self.HelpAction)
# Зашифрованный/Обычный режим
self.crypt = QAction('&В зашифрованный режим', self)
self.crypt.triggered.connect(self.CryptAction)
# Меню
self.menu = QMenuBar()
# self.menu.setNativeMenuBar(False)
# Меню "Файл"
self.filemenu = self.menu.addMenu('&Файл')
self.filemenu.addAction(self.newfile)
self.filemenu.addAction(self.openfile)
self.filemenu.addAction(self.savefile)
self.filemenu.addAction(self.saveAsfile)
self.filemenu.addAction(self.exitfrom)
# Меню "Специальное"
self.specialmenu = self.menu.addMenu('&Специальное')
self.specialmenu.addAction(self.crypt)
# Меню "Вид"
self.viewmenu = self.menu.addMenu('&Вид')
self.viewmenu.addAction(self.plus)
self.viewmenu.addAction(self.minus)
# Меню "Помощь"
self.helpmenu = self.menu.addMenu('&Помощь')
self.helpmenu.addAction(self.helptext)
Ответы (1 шт):
Не используйте множественное наследование, если хорошо не понимаете что вы делаете.
Ознакомьтесь пожалуйста Qt Main Window Framework https://doc.qt.io/qt-5/qmainwindow.html#qt-main-window-framework
Создание главного окна без центрального виджета не поддерживается. У вас должен быть центральный виджет, даже если это просто заполнитель.
void QMainWindow::setMenuBar(QMenuBar *menuBar)
Устанавливает строку меню для главного окна на menuBar. Примечание: QMainWindow становится владельцем указателя menuBar и удаляет его в соответствующее время.
import sys
from PyQt5.Qt import *
#class CodeEditor(QPlainTextEdit, QMainWindow):
class CodeEditor(QMainWindow): # !!!
def __init__(self):
super().__init__()
super(CodeEditor, self).__init__()
#? al = self.CheckConfig()
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.plainTextEdit = QPlainTextEdit()
self.plainTextEdit.setTabStopDistance(16)
self.plainTextEdit.setLineWrapMode(QPlainTextEdit.NoWrap)
self.plainTextEdit.appendPlainText(
'Класс QPlainTextEdit предоставляет виджет, который используется '
'для редактирования и отображения простого текста.'
)
self.plainTextEdit.appendHtml('<h2 style="color: red;">Hello World</h2>')
self.setCentralWidget(self.plainTextEdit) # !!!
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# Var
self.file_name = ''
self.text_size = 16
self.mode_type = 0
self.setFont(QFont("Times New Roman", self.text_size))
# self.setLineWrapMode(QPlainTextEdit.NoWrap)
self.currentLineNumber = True
self.currentLineColor = self.palette().alternateBase()
# self.setTabStopDistance(16)
# self.setTabStopWidth(16) # Это свойство устарело.
self.setWindowIcon(QIcon('Ok.png'))
self.setWindowTitle("Code Editor Lite | untitled | Normal Mode")
#? self.cursorPositionChanged.connect(self.highligtCurrentLine)
#? self.number_bar = self.NumberBar(self)
# Новый файл
self.newfile = QAction('&Новый файл (Ctrl+N)', self)
self.newfile.setToolTip('Ctrl+N')
# self.newfile.triggered.connect(self.NewfileAction)
self.newfile_sc = QShortcut(QKeySequence("Ctrl+N"), self)
# self.newfile_sc.activated.connect(self.NewfileAction)
# Открыть файл
self.openfile = QAction('&Открыть файл (Ctrl+O)', self)
self.openfile.setStatusTip('Ctrl+O')
# self.openfile.triggered.connect(self.OpenfileAction)
self.openfile_sc=QShortcut(QKeySequence("Ctrl+O"), self)
# self.openfile_sc.activated.connect(self.OpenfileAction)
# Сохранить как
self.saveAsfile = QAction('&Сохранить как... (Shift+Ctrl+S)', self)
self.saveAsfile.setStatusTip("Shit+Ctrl+S")
# self.saveAsfile.triggered.connect(self.SaveAsfileAction)
self.saveAsfile_sc = QShortcut(QKeySequence.StandardKey.SaveAs, self)
# self.saveAsfile_sc.activated.connect(self.SaveAsfileAction)
# Сохранить
self.savefile = QAction('&Сохранить (Ctrl+S)', self)
self.savefile.setStatusTip('Ctrl+S')
# self.savefile.triggered.connect(self.SavefileAction)
self.savefile_sc = QShortcut(QKeySequence("Ctrl+S"), self)
# self.savefile_sc.activated.connect(self.SavefileAction)
# Выход
self.exitfrom = QAction('&Выход (Ctrl+Q)', self)
self.exitfrom.setStatusTip('Ctrl+Q')
# self.exitfrom.triggered.connect(self.ExitAction)
self.exitfrom_sc = QShortcut(QKeySequence("Ctrl+Q"), self)
# self.exitfrom_sc.activated.connect(self.ExitAction)
# Увеличение
self.plus = QAction('&Увеличить (Ctrl+Shift+Plus)', self)
self.plus.setStatusTip("Ctrl+Shift+Plus")
# self.plus.triggered.connect(self.PlusAction)
self.plus_sc = QShortcut(QKeySequence.StandardKey.ZoomIn, self)
# self.plus_sc.activated.connect(self.PlusAction)
# Уменьшение
self.minus = QAction("&Уменьшить (Ctrl+Minus)", self)
self.minus.setStatusTip("Ctrl+Minus")
# self.minus.triggered.connect(self.MinusAction)
self.minus_sc = QShortcut(QKeySequence.StandardKey.ZoomOut, self)
# self.minus_sc.activated.connect(self.MinusAction)
# Помощь
self.helptext = QAction('&Справка', self)
# self.helptext.triggered.connect(self.HelpAction)
# Зашифрованный/Обычный режим
self.crypt = QAction('&В зашифрованный режим', self)
# self.crypt.triggered.connect(self.CryptAction)
# Меню
self.menu = QMenuBar()
# self.menu.setNativeMenuBar(False)
# Меню "Файл"
self.filemenu = self.menu.addMenu('&Файл')
self.filemenu.addAction(self.newfile)
self.filemenu.addAction(self.openfile)
self.filemenu.addAction(self.savefile)
self.filemenu.addAction(self.saveAsfile)
self.filemenu.addAction(self.exitfrom)
# Меню "Специальное"
self.specialmenu = self.menu.addMenu('&Специальное')
self.specialmenu.addAction(self.crypt)
# Меню "Вид"
self.viewmenu = self.menu.addMenu('&Вид')
self.viewmenu.addAction(self.plus)
self.viewmenu.addAction(self.minus)
# Меню "Помощь"
self.helpmenu = self.menu.addMenu('&Помощь')
self.helpmenu.addAction(self.helptext)
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.setMenuBar(self.menu) # !!!
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if __name__ == '__main__':
app = QApplication(sys.argv)
window = CodeEditor()
window.show()
sys.exit(app.exec_())
