Witam,
Zacząłem testować PyQt5 i napotkałem pewien problem. Stworzyłem przycisk, potem pasek menu u góry i wszystko fajnie działało. Postanowiłem ulepszyć przycisk o lepsze rozmieszczanie go na ekranie. Użyłem do tego importów QHBoxLayout
i QVBoxLayout
. Wtedy do lasy dodałem dziedziczenie z QWidget
, ale miałem już dziedziczenie z QMainWindow
i w żaden sposób nie chciało mi działać dziedziczenie więcej niż jednej klasy. W zależności od kolejności wpisania klas do nawiasu albo miałem błąd dziedziczenia albo wyświetlało się jedynie menu z przyciskiem w punkcie (0, 0). Postanowiłem więc zrobić to tak jak w załączonym kodzie, a więc nie dziedziczyłem klasy QMainWindow
tylko stworzyłem w klasie Window
obiekt tej klasy. Pasek menu jednak nadal się nie wyświetla. Może chodzi o to, żeby dodać go jakoś do layoutu, ale konstrukcja self.setLayout(menu)
nie przyjmuje argumentu menu. Już skończyły mi się pomysły co do tego, a nie chce rezygnować z wygodnej opcji ustalania pozycji przycisków na ekranie dla menu. Macie jakieś pomysły jak ten problem ogarnąć?
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import QCoreApplication
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPushButton, QAction, QHBoxLayout, QVBoxLayout, \
QGridLayout, QMenuBar, QPlainTextEdit
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('pyqt5 Tut')
menu = QMainWindow()
extractAction = QAction('&Get to the choppah', self)
extractAction.setShortcut('Ctrl+Q')
extractAction.setStatusTip('leave the app')
extractAction.triggered.connect(Window.close_application)
menu.statusBar()
mainMenu = menu.menuBar()
fileMenu = mainMenu.addMenu('&File')
# helpMenu = mainMenu.addMenu('&Help')
fileMenu.addAction(extractAction)
self.setGeometry(400, 100, 1200, 800)
btn = QPushButton("Wyjście", self)
box = QHBoxLayout()
box.addStretch(1)
box.addWidget(btn)
vbox = QVBoxLayout()
vbox.addStretch(1)
vbox.addLayout(box)
self.setLayout(vbox)
btn.clicked.connect(self.close_application)
# btn.resize(100, 100)
self.show()
def close_application(self):
sys.exit()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Window()
sys.exit(app.exec_())