python - 带有网格布局的中央小部件的 QMainwindow 的间距问题
问题描述
我编写了一个小 Snake 示例。
我创建了一个QMainWindow
带有 acentralWidget
的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_())
解决方案
我想我已经解决了。线索是在没有 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_())
推荐阅读
- rust - 大括号表达式对于循环和 while 的行为不同
- javascript - 如何在React中一个一个地循环遍历div标签内的数组元素
- angular - 在Angular中获取“类型'MediaDevices'上不存在属性'getDisplayMedia'”
- c# - HttpClient 返回不完整的响应内容
- python - Bluez 5.23 -> Bluez 5.43 - 蓝牙已连接但没有声音
- python - AWS Lambda 函数如何获取并行函数的结果?
- css - 即使使用 flex-start 或 spece,Flex-box 元素也会拉伸
- mysql - mySQL比较年和周的两个日期
- asp.net-core - .net core SPA Angular中的脚手架管理员CRUD
- python - 从 pathlib 源文件路径导入模块