Я пытаюсь написать игру Connect 4 для своего проекта.Я использую tkinter
без какого-либо предыдущего опыта.Я использую макет grid()
, с 3 строками (1-й для заголовка, 2-й для кнопок и 3-й для холста, отображающего мою игру) и 6 столбцами.Проблема, с которой я столкнулся, заключается в том, чтобы кнопки появлялись вверху каждого столбца.Даже первая кнопка не находится в середине 1-го столбца, и она становится все больше и больше с каждой следующей кнопкой.Я думал, что столбцы будут одинаковой ширины, так как все они содержат одну и ту же кнопку.
P1
- это мой класс, в котором содержится фактическая игровая доска и количество строк / столбцов, которые я планирую сделатьизмените их.
Я пытался использовать grid_rowconfigure
метод, подобный этому:
self.grid_rowconfigure(1, weight=1)
Но, похоже, это не имеет никакого эффекта.
#Main.py
class Game:
def __init__(self, roows, coolumns):
self.rows = roows
self.columns = coolumns
self.gameTable = [["x" for x in range(self.columns)] for y in range(self.rows)]
self.which_row = [5 for x in range(self.columns)]
from tkinter import *
import Main
class Window(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.master = master
self.master.title("connect four")
self.grid()
Tytul = Label(self, text="Hello", font=("Helvetica", 24), fg="medium blue")
Tytul.grid(row=0, columnspan=6)
for i in range(P1.columns):
button = Button(self, text="▼")
button.grid(row=1, column=i)
#self.grid_rowconfigure(1, weight=1)
def draw_gametable(self):
canvas1 = Canvas(self, relief=FLAT, background="#D2D2D2",
width=P1.columns*100, height=P1.rows*100)
canvas1.grid(row=2, columnspan=6)
cellwidth = 100
cellheight = 100
for column in range(P1.columns):
for row in range(P1.rows):
if P1.gameTable[row][column] == "x":
color = "grey"
elif P1.gameTable[row][column] == "z":
color = "yellow"
elif P1.gameTable[row][column] == "c":
color = "Red"
x1 = column * cellwidth
y1 = row * cellheight
x2 = x1 + cellwidth
y2 = y1 + cellheight
canvas1.create_rectangle(x1, y1, x2, y2, fill="cornflower blue")
canvas1.create_oval(x1 + 2, y1 + 2, x2 - 2, y2 - 2, fill=color,
tags="oval")
if __name__ == "__main__":
P1 = Main.Game(6, 7)
root = Tk()
instance = Window(root)
instance.draw_gametable()
root.mainloop()
Вот как бы я хотел, чтобы это выглядело