Python 网格内的 Tkinter 网格?
Python Tkinter grid inside grid?
我正在尝试创建一个二维地图,每个地图单元格都有另一个 5x5 单元格。
我能够生成以下二维地图:
在每个块中,我想创建另一个更小的 3x3 网格单元,这样在每个块中都会有这样的东西:
mymap.py:
from tkinter import *
class MyMap():
def __init__(self, master, i, j):
self.text = StringVar()
self.label = Label(master, textvariable = self.text, height = 5, width = 11, relief = RIDGE, bg = "gray30", fg = "white", font = "Helvetica 12")
self.label.grid(row = i, column = j, sticky = W, pady = 1)
self.row = i
self.col = j
main.py
master = Tk()
[[MyMap(master, i, j) for j in range(4)] for i in range(4)]
您可以使用 Frames 创建 4x4 网格,并且在每一帧中您都可以将 MyMap
放入 3x3 网格中。
import tkinter as tk # PEP8: `import *` is not preferred
class MyMap():
def __init__(self, master, i, j, text='?'):
self.text = tk.StringVar(master, value=text)
self.label = tk.Label(master, textvariable=self.text, height=5, width=11, relief='ridge', bg="gray30", fg="white", font="Helvetica 12")
self.label.grid(row=i, column=j, sticky='w', pady=1, padx=1)
self.row = i
self.col = j
root = tk.Tk()
for outer_row in range(4):
for outer_col in range(4):
f = tk.Frame(root)
f.grid(row=outer_row, column=outer_col, padx=5, pady=5)
for inner_row in range(3):
for inner_col in range(3):
text = inner_row*3 + inner_col
MyMap(f, inner_row, inner_col, text)
root.mainloop()
我正在尝试创建一个二维地图,每个地图单元格都有另一个 5x5 单元格。
我能够生成以下二维地图:
在每个块中,我想创建另一个更小的 3x3 网格单元,这样在每个块中都会有这样的东西:
mymap.py:
from tkinter import *
class MyMap():
def __init__(self, master, i, j):
self.text = StringVar()
self.label = Label(master, textvariable = self.text, height = 5, width = 11, relief = RIDGE, bg = "gray30", fg = "white", font = "Helvetica 12")
self.label.grid(row = i, column = j, sticky = W, pady = 1)
self.row = i
self.col = j
main.py
master = Tk()
[[MyMap(master, i, j) for j in range(4)] for i in range(4)]
您可以使用 Frames 创建 4x4 网格,并且在每一帧中您都可以将 MyMap
放入 3x3 网格中。
import tkinter as tk # PEP8: `import *` is not preferred
class MyMap():
def __init__(self, master, i, j, text='?'):
self.text = tk.StringVar(master, value=text)
self.label = tk.Label(master, textvariable=self.text, height=5, width=11, relief='ridge', bg="gray30", fg="white", font="Helvetica 12")
self.label.grid(row=i, column=j, sticky='w', pady=1, padx=1)
self.row = i
self.col = j
root = tk.Tk()
for outer_row in range(4):
for outer_col in range(4):
f = tk.Frame(root)
f.grid(row=outer_row, column=outer_col, padx=5, pady=5)
for inner_row in range(3):
for inner_col in range(3):
text = inner_row*3 + inner_col
MyMap(f, inner_row, inner_col, text)
root.mainloop()