Проблема с пробелами в QMainwindow с центральным виджетом, имеющим сетку - PullRequest
0 голосов
/ 02 мая 2018

Я написал небольшой пример со Snake.

Я создал QMainWindow с centralWidget, который имеет gridlayout. Кажется, я не могу правильно определить расстояние. Я думал, что смогу сделать это с setContentMargins(), поэтому я поместил его везде, где только смогу, но место все еще осталось. Я, наверное, что-то наблюдаю. Я думаю, что это связано с моей сеткой. Но я не вижу проблемы. Мысли?

Вот изображение: https://imgur.com/tHbf6tV

Вот мой код:

import sys
from PyQt5 import QtWidgets as qw
from PyQt5 import QtGui as qg
from PyQt5 import QtCore as qc

class Snake(qw.QMainWindow):

    def __init__(self, parent=None):
        super(Snake, self).__init__(parent)
        self.setContentsMargins(0,0,0,0)
        self.test()
        self.show()

    def test(self):
        self.centralwidget = qw.QWidget()
        self.setCentralWidget(self.centralwidget)
        self.centralwidget.setStyleSheet("background-color: green")

        self.gridLayout = qw.QGridLayout()
        self.gridLayout.setSpacing(0)
        # self.gridLayout.setContentsMargins(0, 0, 0, 0)

        self.vLayout = qw.QVBoxLayout(self.centralwidget)
        self.hLayout = qw.QHBoxLayout()

        self.hLayout.setContentsMargins(0, 0, 0, 0)
        self.vLayout.setContentsMargins(0, 0, 0, 0)

        # center the grid with stretch on both sides

        self.hLayout.addLayout(self.gridLayout)
        self.hLayout.addStretch(0)

        self.vLayout.addLayout(self.hLayout)
        # push grid to the top of the window
        self.vLayout.addStretch(0)

        self.buttons = []
        for i in range(24):
            l = []
            for j in range(24):
                b = qw.QPushButton()
                b.setFixedSize(20, 20)
                b.setStyleSheet("background-color: black")
                l.append(b)
                self.gridLayout.addWidget(b, i, j)
                self.gridLayout.setColumnMinimumWidth(j, 20)
            self.buttons.append(l)
            self.gridLayout.setRowMinimumHeight(i, 16)

        self.buttons[5][5].setStyleSheet("background-color: green")
        self.buttons[4][5].setStyleSheet("background-color: green")
        self.buttons[3][5].setStyleSheet("background-color: green")

if __name__ == '__main__':
    app = qw.QApplication(sys.argv)
    Menu = Snake()
    sys.exit(app.exec_())

1 Ответ

0 голосов
/ 02 мая 2018

Я думаю, что решил это. Ключом было воссоздать мою сетку без QHBoxLayout и QVBoxLayout.

Вот мой код:

import sys
from PyQt5 import QtWidgets as qw
from PyQt5 import QtGui as qg
from PyQt5 import QtCore as qc


class Snake(qw.QMainWindow):
    def __init__(self, parent=None):
        super(Snake, self).__init__(parent)
        self.setContentsMargins(0, 0, 0, 0)
        self.setFixedSize(20*24,20*24)
        self.test()
        self.show()


    def test(self):
        self.centralwidget = qw.QWidget()
        self.setCentralWidget(self.centralwidget)
        self.centralwidget.setStyleSheet("background-color: green")
        self.centralwidget.setContentsMargins(0, 0, 0, 0)

        self.gridLayout = qw.QGridLayout()
        self.gridLayout.setSpacing(0)
        self.gridLayout.setContentsMargins(0,0,0,0)


        self.buttons = []
        for i in range(24):
            for j in range(24):
                b = qw.QLabel("Knopf" + str(i) + "/" + str(j))
                b.setFixedSize(20, 20)
                b.setStyleSheet("background-color: black")
                self.gridLayout.addWidget(b, i, j)
                self.gridLayout.setColumnMinimumWidth(j, 20)
            self.gridLayout.setRowMinimumHeight(i, 16)

        self.centralwidget.setLayout(self.gridLayout)


if __name__ == '__main__':
    app = qw.QApplication(sys.argv)
    Menu = Snake()
    sys.exit(app.exec_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...