Я пытаюсь смоделировать сетку, как то, что будет использоваться для игрового поля, используя прямоугольники tkinter, нарисованные на холсте, однако у меня возникают проблемы с созданием цикла, который делает это правильно.Сделать сетку с Tkinter Rectangle
Практически у меня есть переменная, которая содержит определенное количество строк для сетки и переменной для количества столбцов, и мне нужно создать сетку прямоугольников на основе тех конфигураций, которые могут измениться в любое время, когда приложение который делает его немного сложным для меня.
В любом случае, я в настоящее время имеют функцию, чтобы нарисовать прямоугольник на экране, как так:
def _place_empty_tiles(self):
self._canvas.update()
width = self._canvas.winfo_width()
height = self._canvas.winfo_height()
self.x = width/self._game.columns
self.y = height/self._game.rows
for i in range(self._game.columns):
click_point = point.from_pixel(self.x, self.y, width, height)
self._state.handle_click(click_point)
self.x += 60
def _redraw_game_pieces(self)->None:
'''Delete and redraw all the of game pieces'''
self._canvas.delete(tkinter.ALL)
canvas_width = self._canvas.winfo_width()
canvas_height = self._canvas.winfo_height()
for tile in self._state.all_tiles():
center_x, center_y = tile.center().pixel(canvas_width, canvas_height)
radius_x = tile.radius_frac() * canvas_width
radius_y = tile.radius_frac() * canvas_height
self._canvas.create_rectangle(
center_x - radius_x, center_y - radius_y,
center_x + radius_x, center_y + radius_y,
fill = '#006000', outline = '#000000')
Вы можете заметил я некоторые пользовательские координатные методы преобразования происходит, чтобы компенсировать экрана повторной калибровки. Однако моя проблема заключается в функции _place_empty_tiles(self)
в цикле for. Скажем, количество столбцов 4, он в настоящее время печать на холсте следующее:
Однако
- это на самом деле делает ряд, и
- , что только одна строка.
Как я могу сделать это, так что я могу создать сетку с подобным стилем, учитывая количество строк и столбцов, хранятся в self._game.columns
и self._game.rows
?
UPDATE: Пробовал основывая его The tkinter Knight's Tour Demo я переписал функцию следующим образом:
def _place_empty_tiles(self):
self._canvas.update()
width = self._canvas.winfo_width()
height = self._canvas.winfo_height()
for r in range(self._game.rows -1,-1,-1):
for c in range(self._game.columns):
click_point = point.from_pixel(c*30+4, r*30+4, c*30+30, r*30+30)
self._state.handle_click(click_point)
self._redraw_game_pieces()
который близок, но по-прежнему получать некоторые неожиданные результаты:
Я только что попробовал, и он ничего не рисует на холсте. – user4422713
Это не полная программа, но если вы используете ее вместе с 'root = Tk(); canvas = Canvas (root); canvas.pack (заполнить = "и"); draw_board (холст); root.mainloop() ', то это, безусловно, нарисует шаблон шахматной доски. – patthoyts
Хорошо, мне удалось реализовать, и я обновил свой вопрос, но я все еще получаю странные результаты. У меня проблемы с координатами. – user4422713