Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

Re: Tk::Table too slow. Alternatives ?

by pg (Canon)
on Jan 01, 2004 at 22:43 UTC ( #318175=note: print w/replies, xml ) Need Help??

in reply to Tk::Table too slow. Alternatives ?

Tk::Table is slow, but I tried with 40 X 5 table, it seems "okay" to me.

I don't know what widget you used for each cell. Some widgets are lighter than others. As you said an alternative is to draw on Canvas, I assume your table is readonly, in this case, Label is good enough for your cells. You can use Button as row and column header. (Even if your cells are writable, most likely Entry is good enough.)

Below is the code I tried, it does take around 10 seconds to come up, but after that it responses to row or column scroll quite okay. (I think I should mention that my computer is 7 years old and really slow)

use Tk; use Tk::Table; use Data::Dumper; use strict; my $mw = MainWindow->new; $mw->geometry("600x250"); my $table = $mw->Table(-rows => 40, -columns => 5, -scrollbars => "se", -fixedrows => 1, -fixedcolumns => 1, -takefocus => 1)->pack; foreach my $col (1 .. 5) { my $col_header = $mw->Button(-text => "Column " . $col); $table->put(0, $col, $col_header); } foreach my $row (1 .. 40) { my $row_header = $mw->Button(-text => "Row " . $row); $table->put($row, 0, $row_header); foreach my $col (1 .. 5) { my $cell = $mw->Label(-width => 10, -text => $row * $col, -bor +derwidth => 1, -relief => "solid"); $table->put($row, $col, $cell); } } MainLoop;

I do have a thought triggered by your OP, to create something like Tk::TableLite. The biggest parts I want to improve are:

  1. instead of having one widget for each cell, only have one widget for each cell in the viewport. By doing this, the weight of the GUI, is no longer related to the size of the data, and it is predetermined.
  2. Scroll should not scroll widgets (cells), widgets are fixed. Scroll only scrolls a sliding window against the data, and the data in the sliding window will be used to reset the text displayed in cells.

Replies are listed 'Best First'.
Re: Re: Tk::Table too slow. Alternatives ?
by spurperl (Priest) on Jan 02, 2004 at 08:15 UTC
    It's not terribly slow, but it's slow. I use Labels as the widgets, so it should be faster, in theory... The most annoying part is turning it off - it takes 5 seconds to close the application (hmm... sending kill messages to 200+ windows).

    Anyway, I implemented a table with a Canvas, it works nicely and is faster. I needed another Canvas for the headings though, as I wanted them to be un-scrollable.

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://318175]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (6)
As of 2022-12-05 18:19 GMT
Find Nodes?
    Voting Booth?

    No recent polls found