from Tkinter import *
class Ball:
def __init__(self, canvas, x1, y1, x2, y2):
self.x1 = x1
self.y1 = y1
self.x2 = x2
self.y2 = y2
self.canvas = canvas
self.ball = canvas.create_oval(self.x1, self.y1, self.x2, self.y2, fill="red")
# initialize root Window and canvas
root = Tk()
root.title("Balls")
root.resizable(False, False)
canvas = Canvas(root, width=300, height=300)
canvas.pack()
# create ball objects
ball = Ball(canvas, 0, 0, 300, 300)
root.mainloop()
Как вы видите, я рисую 300 * 300 овалов в холсте 300 * 300, но овал не идеально подходит для полотна. Результат (Mac OS):Почему 300 * 300 Овал не может идеально подогнать 300 * 300 Canvas?
Так что мой вопрос:
- Почему это не подходит идеально?
- Что мне делать, чтобы избежать таких неудобных вещей?
EDIT:
ball = Ball(canvas, 1, 1, 299, 299)
не работает, либо, это дает:
Проблема в том, что координата (0,0) фактически находится под декоратором окна ОС. У Windows такая же проблема. Единственное «решение» - рисовать со смещением. –
@ cricket_007: это не под «декоратором окон», это просто под собственной границей. –
В Windows 10 с 3.5.1 (tk 8.6.4) 'Ball (canvas, 2, 2, 301, 301)' отлично работает. Я добавил 'bg = 'blue'' на вызов Canvas и лупу для проверки. Также см. Комментарий к ответу Оукли. –