Velocity Reviews > How do I get the fractions of the visible part of a canvas?

# How do I get the fractions of the visible part of a canvas?

=?ISO-8859-1?Q?Mickel_Gr=F6nroos?=
Guest
Posts: n/a

 07-02-2003
Hi,

I have a Tkinter.Canvas of variable width. Is there a standard way of
asking the canvas which parts of it that is visible? I.e. on the
horizontal scale, I would like to know at what fraction from the left the
left visibility border is and from what fraction to the right the right
visibility border is.

Consider this ascii picture as an example

+-------------------------------+
| |<-- the full canvas
| a------------------+ |
| | |<--------- the currently visible part
| +------------------b |
| |
+-------------------------------+

I would like to be able to ask the canvas something like:

t = canvas.visiblebox()

and it would return a two-tuple of two-tuples with coordinates (of the
a and b points in the picture above), say:

t = ((10,10), (90,30))

Using these values I could calculate the fractions myself.

Any ideas?

/Mickel

--
Mickel Grönroos, application specialist, linguistics, Research support, CSC
PL 405 (Tekniikantie 15 a D), 02101 Espoo, Finland, phone +358-9-4572237
CSC is the Finnish IT center for science, www.csc.fi

Eric Brunel
Guest
Posts: n/a

 07-02-2003
Mickel Grönroos wrote:
> Hi,
>
> I have a Tkinter.Canvas of variable width. Is there a standard way of
> asking the canvas which parts of it that is visible? I.e. on the
> horizontal scale, I would like to know at what fraction from the left the
> left visibility border is and from what fraction to the right the right
> visibility border is.
>
> Consider this ascii picture as an example
>
> +-------------------------------+
> | |<-- the full canvas
> | a------------------+ |
> | | |<--------- the currently visible part
> | +------------------b |
> | |
> +-------------------------------+
>
> I would like to be able to ask the canvas something like:
>
> t = canvas.visiblebox()
>
> and it would return a two-tuple of two-tuples with coordinates (of the
> a and b points in the picture above), say:
>
> t = ((10,10), (90,30))
>
> Using these values I could calculate the fractions myself.
>
> Any ideas?

This should do what you want:

--------------------------------
from Tkinter import *

## Initialize Tk
root = Tk()
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

## Create the canvas
cnv = Canvas(root, scrollregion=(0, 0, 1000, 1000), width=200, height=200)
cnv.grid(row=0, column=0, sticky='nswe')

## Create the scrollbars
hs = Scrollbar(root, orient=HORIZONTAL, command=cnv.xview)
vs = Scrollbar(root, orient=VERTICAL, command=cnv.yview)
cnv.configure(xscrollcommand=hs.set, yscrollcommand=vs.set)
hs.grid(row=1, column=0, sticky='we')
vs.grid(row=0, column=1, sticky='ns')

## This is the function you want:
def showVisibleRegion():
x1, y1 = cnv.canvasx(0), cnv.canvasy(0)
w, h = cnv.winfo_width(), cnv.winfo_height()
x2, y2 = cnv.canvasx(w), cnv.canvasy(h)
print x1, y1, x2, y2

b = Button(root, text='Show', command=showVisibleRegion)
b.grid(row=2, column=0, columnspan=2)

root.mainloop()
--------------------------------

The methods canvasx and canvasy on a Canvas convert a coordinate in the
displayed canvas to a coordinate in the underlying region:

+------------------------------+
| |
| |
| +----------------------+ |
| | | |
| |<--x-->| | |
| | + | |
| | | | |
| +-------|--------------+ |
|<---xx---->| |
| |
+------------------------------+

Here, cnv.canvasx(x) = xx

So, taking the canvasx and canvasy of (0, 0) gives you the coordinates for the
top-left corner of the region you want, and taking the canvasx and canvasy of
the canvas's dimensions gives you the bottom-right one.

HTH
--
- Eric Brunel <(E-Mail Removed)> -
PragmaDev : Real Time Software Development Tools - http://www.pragmadev.com

 Thread Tools

 Posting Rules You may not post new threads You may not post replies You may not post attachments You may not edit your posts BB code is On Smilies are On [IMG] code is On HTML code is OffTrackbacks are On Pingbacks are On Refbacks are Off Forum Rules

 Similar Threads Thread Thread Starter Forum Replies Last Post Edward A. Falk C Programming 1 04-04-2013 08:07 PM Patrick Olurotimi Ige ASP .Net 7 06-15-2005 12:01 PM tshad ASP .Net 4 01-31-2005 09:30 PM tshad ASP .Net 6 10-28-2004 10:02 PM spamfurnace ASP .Net 1 05-24-2004 03:07 AM

Advertisments