Как я могу избавиться от предыдущего макета и установить новый макет сетки в QMainWindow?

Я новичок в PyQt. Я пытаюсь организовать свои кнопки в виде сетки, но я думаю, что окно уже имеет макет по умолчанию. Как я могу избавиться от него и заменить его новым макетом сетки? Я содержал блок кода, относящийся к хэшам ###. Вот моя программа:

Снимок программы

import sys
from PyQt4 import QtCore, QtGui
from PyQt4.QtGui import QWidget

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QWidget.__init__(self)

        self.setMinimumSize (800,600) # set minimum size for window
        self.setWindowTitle("CoolPlay Kabul") # set window title

        self.setWindowIcon(QtGui.QIcon("images/CoolPlay.png"))# set icon for Window


        myMenu = self.menuBar()
        File_Menu = myMenu.addMenu("&File")
        Items_Menu = myMenu.addMenu("&Items")
        Playlist_Menu = myMenu.addMenu("&Playlist")
        Option_Menu = myMenu.addMenu("&Option")
        Exit_Menu = myMenu.addMenu("&Exit")

        File_Menu.addAction("New Time")
        File_Menu.addAction("Delete Time")
        File_Menu.addSeparator()
        File_Menu.addAction("Exit")

        Items_Menu.addAction("New Item")
        Items_Menu.addAction("Delete Item")
        Items_Menu.addSeparator()
        Items_Menu.addAction("Toggle Segue")

        Playlist_Menu.addAction("Clear Playlist")
        Playlist_Menu.addAction("Save playlist")
        Playlist_Menu.addAction("Load Playlist")
        Playlist_Menu.addSeparator()
        Playlist_Menu.addAction("Clear 'Played' Indication")

        Option_Menu.addAction("Application Setup")

        Exit_Menu.addAction("Help")
        Exit_Menu.addAction("About")

        ######################################################
        Overall_Layout = QtGui.QGridLayout(self)
        self.setLayout(Overall_Layout)

        Play_Button = QtGui.QPushButton(QtGui.QIcon("images/PLAY.bmp"), "PLAY",self)
        Overall_Layout.addWidget(Play_Button,1,2)
        Overall_Layout.addWidget(Play_Button,2,2)

        ########################################################


        self.show()
if __name__ == "__main__":

    app = QtGui.QApplication(sys.argv)
    CoolPlay = MainWindow()


    CoolPlay.show()
    sys.exit(app.exec_())

person Elham Khan    schedule 18.10.2018    source источник
comment
Привет. Хорошо, что вы разместили свой код вместе с проблемой. Вы можете расширить его, добавив изображение вашей проблемы (потому что это пользовательский интерфейс) и то, что вы на самом деле хотите   -  person Nebulosar    schedule 18.10.2018
comment
Хороший! Надеюсь, кто-то может вам помочь, я сам умею писать на Python, но знаю, что такое pyqt:/   -  person Nebulosar    schedule 18.10.2018
comment
@eyllanesc Решено!! Огромное спасибо   -  person Elham Khan    schedule 18.10.2018


Ответы (1)


QMainWindow — это специальный виджет, так как он уже имеет предустановленный макет, как показано ниже:

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

Так вот в этом случае надо ставить лейаут не на QMainWindow а на центральный виджет, а сначала установить центральный виджет, с помощью указанной штуки получаем следующее:

######################################################
central_widget = QtGui.QWidget()
self.setCentralWidget(central_widget)
Overall_Layout = QtGui.QGridLayout(central_widget)
Play_Button = QtGui.QPushButton(QtGui.QIcon("images/PLAY.bmp"), "PLAY")
Overall_Layout.addWidget(Play_Button,1,2)
Overall_Layout.addWidget(Play_Button,2,2)

########################################################

С другой стороны, если вы наследуете от QMainWindow, вы должны вызвать конструктор QMainWindow, но в коде вы вызываете QWidget, поэтому вы должны изменить его на:

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

Or

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
person eyllanesc    schedule 18.10.2018