You can easily do a table with a combination of HBoxContainer
(rows, kinda) and VBoxContainer
(columns, kinda). Or alternatively a GridContainer
, which will wrap your Nodes to another row at the end of the row.
At the base of your table, put a PanelContainer
node, and play around with its StyleBox panel setting in the Theme Override section. You can put a border, margins, background, etc.
As a child to that PanelContainer
, put a GridContainer
and change its columns
property to whatever you need as a number of columns, e.g. 3.
Then, as children to the GridContainer
, put Label
nodes. Suggest to put at least double the amount of columns you set up to see how it wraps rows, and always make it a multiple of your columns number. You can then put some content into the Label
s to see how it all behaves. Just make sure that your Label
s are the same fixed size, otherwise they won’t align into a proper table. You can turn clip_text
to true and set minimum_custom_size
to make them properly fixed in size. You can change the label’s panel theme override properties too to have borders etc., so it looks like a proper table.
Using HBoxContainer
and VBoxContainer
would be a bit different, as you need to think in terms of rows and columns separately. I usually prefer doing it this way.
You also start with a PanelContainer
to do some basic foundation, and then put one VBoxContainer
as a child - no matter how many column you need, one VBoxContainer
should be enough, unless you need some specific different behavior of some columns. Then, as a child to that, you put HBoxContainer
s in the amount of how many rows you need. In each of the HBoxContainer
s you put as many Label
nodes as many you need columns. Ideally all should have the same amount of Label
s. Each of these labels will serve as a column value for this specific row. Again, I would suggest to fix the size of the Label
s, otherwise they might not align. And change the style of the labels to be more table-like.
Be sure to play around with container sizing properties - see how it behaves when you mark it as extend vertically, horizontally, shrink end, full rect, etc.
You can also play around with a ScrollContainer
if your table gets bigger than the size of the screen - you just put it as a parent to your first GridContainer
or VBoxContainer
.
You can also think about using SplitContainer
to make your column width or row height resizable like in Excel. But that’s a bit of a hassle right now, as with let’s say 15 columns you need to stack 14 SplitContainer
s on top of each other, and you need to synchronise them across your rows with signals. I would put that aside until much later if I were you 
Sorry I can’t put any screenshots or examples, but I’m writing this on mobile. Hope it makes some sense.
If you have any other specific questions - let me know.
I would highly suggest just sit and try it out on your own, you will learn it quicker than watching any tutorials.
DisplayServer.screen_set_orientation()
Check out the docs here: