Найти - Пользователи
Полная версия: Вывод надписей на create_rectangle в tkinter
Начало » GUI » Вывод надписей на create_rectangle в tkinter
1
Karnaval
Добрый всем день.

Подскажите, пожалуйста: Создаю в tkinter функцию которую затем вызываю в цикле для рисования группы квадратов и проставления в них значения:

from tkinter import *
tk = Tk()
canv = Canvas(tk, width = 800, height = 600, bg = "lightblue")
canv.pack()
def checkered(width_r, height_r, x_r, y_r, cor_x, cor_y, cont):
    canv.create_rectangle(width_r, height_r, x_r, y_r)
    canv.create_text(cor_x, cor_y, text=cont)
for g in range(15):
    num = 30 * g
    cor_x = 18 * g
    print (checkered(30, 30, num, 0, cor_x, 10, g))
tk.mainloop()

Работает, но не получается текст накладывать ровно. Хочется, чтобы вывод значений был увязан с каждым конкретным квадратом. Как этого можно достичь? Буду благодарен за любую подсказку.

Спасибо.
4kpt
Простите. Не совсем понял, зачем это нужно :)
Может лучше построить группу canvas необходимого размера и в каждый из них внести число?
Будет ли что-то дальше происходить с этими квадратами - числами или они остануться статичными?
В принципе, можно высчитать место для цифры. Просто пытаюсь понять, действительно ли это нужно. Решение очень сомнительное :)

P.S. Хочу помочь, но нужно понять в чем…
Karnaval
4kpt
Простите. Не совсем понял, зачем это нужно :)Может лучше построить группу canvas необходимого размера и в каждый из них внести число?Будет ли что-то дальше происходить с этими квадратами - числами или они остануться статичными?В принципе, можно высчитать место для цифры. Просто пытаюсь понять, действительно ли это нужно. Решение очень сомнительное :)P.S. Хочу помочь, но нужно понять в чем…

Идея выглядит так: Есть некая поляна из клеток (условно, можно говорить о шахматной доске). Каждой клетка в зависимости от значения из базы данных, будет присвоен свой свой цвет. Что бы понимать, почему каждой клетке присвоено то или иное цифровое значение, поверх клетки будет выводиться число. Сами клетки и числа статичны.
Хочется понять, как можно написать функцию, при вызове которой нарисуется квадрат в который текст (что самое важное) будет по умолчанию в центре квадрата. Может быть бесконечное число рядов квадратов и самих кадратов, поэтому работать с x и y координатами у каждой надписи кажется не совсем рациональным решением.

Решение проблемы, я вижу в высчитывании отступа от левого внутреннего края квадрата, но не знаю можно ли такое в tkinter делать.
4kpt
Karnaval
Решение проблемы, я вижу в высчитывании отступа от левого внутреннего края квадрата, но не знаю можно ли такое в tkinter делать.
Мое мнение. Не верно Вы видите :)
В идеале это сделать массив canvas, цвет которых зависит от данных из базы. В каждом canvas рационально разместить число. Можно еще сделать это с помощью button, т.е. использовать массив кнопок. Заодно и будет возможность по ним потыкать :)

P.S. Если нужен пример - пишите…
Karnaval
4kpt
эмм.. кажется я начинаю понимать. Т.е. можно создать не один canvas и располагать на нём объекты, а создать множество клеток, где каждая клетка отдельный canvas?
4kpt
Karnaval
эмм.. кажется я начинаю понимать. Т.е. можно создать не один canvas и располагать на нём объекты, а создать множество клеток, где каждая клетка отдельный canvas?
Я воль, майн фюрер :)

P.S. Ну так помощь нужна?
Karnaval
4kpt
Пока не надо, Вы и так очень помогли =) Попробую поковыряться и делать наверное буду как вы и советовали - кнопками.
4kpt
Не забудьте на кнопках поменять свойства relief и bd :)

P.S. Пишите, если что…
sp3
можно так
from tkinter import *
tk = Tk()
canv = Canvas(tk, width = 1024, height = 900, bg = "lightblue")
canv.pack()
SIZE_X = 50
SIZE_Y = 16
for x in range(20):
    for y in range(20):
        numx = SIZE_X * x
        numy = SIZE_Y * y
        canv.create_rectangle(numx, numy, numx+SIZE_X, numy+SIZE_Y)
        canv.create_text(numx+SIZE_X/2  , numy+SIZE_Y/2, text="%s-%s"%(x,y))
tk.mainloop()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB