Строим шахматную доску с кнопками, которая всегда квадратная - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь построить шахматную доску, состоящую из кнопок. Я создал 3 виджета в одну строку. Снаружи есть наклейки (начинка), а внутри я хочу поставить шахматную доску. Я бы хотел, чтобы он всегда занимал 90% ширины экрана и автоматически настраивал его высоту так, чтобы он всегда оставался квадратным. Также было бы необходимо установить кнопки всегда квадратными, но я также не могу справиться с этим. Можете ли вы помочь мне?

class ChessBoard(GridLayout):
    def __init__(self, **kwargs):
        super(ChessBoard, self).__init__(**kwargs)
        self.cols = 8

        for i in range(64):
            self.cell = Button(text="", size_hint_y=self.height/8, height=self.width/8)
            self.add_widget(self.cell)

class ChessBoardContainer(GridLayout):
    def __init__(self, **kwargs):
        super(ChessBoardContainer, self).__init__(**kwargs)

        self.orientation='horizontal'
        self.cols=3

        self.lab1 = Label(text="1")
        self.add_widget(self.lab1)

        self.board = ChessBoard()
        self.add_widget(self.board)

        self.lab2 = Label(text="2")
        self.add_widget(self.lab2)


class CombWidget(BoxLayout):
    def __init__(self, **kwargs):
        super(CombWidget, self).__init__(**kwargs)
        self.orientation='vertical'

        self.but1 = Button(text="But1", font_size=40)
        self.add_widget(self.but1)

        self.chessb = ChessBoardContainer()
        self.add_widget(self.chessb)

        self.but2 = Button(text="But2", font_size=40)
        self.add_widget(self.but2)


class MyPaintApp(App):
    def build(self):
        return CombWidget()

Прямо сейчас это мой результат:

enter image description here

Я хотел бы получить что-то подобное (Мастер краски;)). Может быть, это можно сделать без этих ярлыков?

enter image description here

Ответы [ 2 ]

1 голос
/ 29 января 2020

Чтобы кнопки были квадратными, вам просто нужно установить высоту и ширину ячеек GridLayout, и вы пытаетесь сделать это с помощью size_hint. Попробуйте это:

from kivy.core.window import Window

class ChessBoard(GridLayout):
    def __init__(self, **kwargs):
        super(ChessBoard, self).__init__(**kwargs)
        self.cols = 8
        winsize = Window.size
        sizedict = {}

        # to set width and height of GridLayout cells, you should make a dict, where the key is col's/row's number and the value is size
        for i in range(self.cols):
            sizedict[i] = winsize[0]/8 #or you can divide it by 10 for example to have some black filling on the sides

        # and then simply do this
        self.cols_minimum = sizedict
        self.rows_minimum = sizedict
0 голосов
/ 29 января 2020

Этот код производит кнопки, которые выглядят довольно квадратными для меня. Если вы планируете использовать изображения для своих шахматных фигур, кнопки будут соответствовать размеру этих.

from tkinter import Tk, Button

window = Tk ()
squares = []
index = 0
for x in range (8) :
    for y in range (8) :
        squares.append (Button (window, width = 7, height = 4))
        squares [index].grid (row = x, column = y)
        index += 1
window.mainloop ()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...