classification
Title: Tkinter issues with Scrollbar and custom widget list
Type: behavior Stage:
Components: Tkinter Versions: Python 3.1, Python 3.2, Python 2.7
process
Status: closed Resolution: works for me
Dependencies: Superseder:
Assigned To: Nosy List: Robert.Lerche, gpolo, ocean-city, terry.reedy
Priority: normal Keywords:

Created on 2010-10-29 15:39 by Robert.Lerche, last changed 2010-11-05 19:29 by terry.reedy. This issue is now closed.

Files
File name Uploaded Description Edit
testcase.py Robert.Lerche, 2010-10-29 15:39 test program demonstrating Tkinter problems
Messages (9)
msg119907 - (view) Author: Robert Lerche (Robert.Lerche) Date: 2010-10-29 15:39
I have run across several issues (one serious one, showing up only on Windows) when implementing a scroll bar with a list of custom widgets.

I suspect these may really be Tk issues but I thought I'd try posting here first.  I sent this to the tkinter-discuss list and saw no replies.

Please have a look and advise me on the right way to proceed.  Thanks.
msg119940 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2010-10-29 22:10
I have not tried your testcase yet, but agree that issue 4 sounds pretty bad. I guess what you are looking for is either a patch to tkinter that solves at least one of the listed problems (even if only a workaround for a TK bug) or a determination that nothing can be done.
msg119944 - (view) Author: Robert Lerche (Robert.Lerche) Date: 2010-10-29 22:27
Hi and thanks for the quick response.

I'm happy to follow up with the Tk folks if it turns out that's where
the problem lies -- it has been a long time since I wrote a Tcl script
so before trying to reproduce the behavior that way I thought I'd try
posting what I have so far.

If you can just confirm that the behavior is reproducible that would
be a good start.  As I wrote, I have built everything from sources on
Windows so there's always a chance I've done something wrong, although
so much is working correctly that I don't expect that to be the case.

I'm trying to introduce Python as a development tool at a consulting
client (a large company) so I have to pursue stuff like this.

Thanks again.
msg119952 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2010-10-30 01:50
I ran testcase.py with stock 3.1.2 on winxp (under IDLE).
Changes needed (one place each) were
Tkinter -> tkinter
print x -> print(x)
<>      -> !=    # <> is long since deprecated!

I get 3 line box windowing 10 lines. If I enlarge window, there are still only 3 lines displayed.

With triangle arrows at top and bottom of scroll bar box, I can scroll up and down a line at a time, with lines 1 to 8 at top. Nothing prints. There is a slight flash with redisplay.

With click and move on scroll bar itself, I can get down to where line 4 is at the top. Motion is not really jerky, rather it jumps one line at a time, just as with triangles. Going farther, box goes crazy flashing. When I unclick mouse, it settles all the way down with line 8 on box. Repetitious print looks like
0.4 0.4 4
0.7001 0.7001 7
0.4334 0.4334 4
0.7 0.7 7
0.4333 0.4333 4
0.7 0.7 7
...
So confirmed behavior is, if anything, worse. Just to make sure that print was not causing a problem, I commented it out and got same behavior.

I do not know enough tkinter (tk) to know if there is a bug in your code. I recommend posting to python-list, subject: Problem with tkinter box, with this link and short explanation. There are some people there who know tkinter much better than me who might comment.
msg120157 - (view) Author: Robert Lerche (Robert.Lerche) Date: 2010-11-01 19:55
Terry, I tried posting to python-list and all I got was "why are you doing that?  Use Tix instead."

Maybe it's good advice but it doesn't address the issue.  And Tix is yet one more component I'd have to build (the Python distribution comes with Tix interface code but Tix itself is yet another .dll).

I haven't decided how to proceed yet but if you have any suggestions please let me know.  Thanks again.
msg120167 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2010-11-01 20:46
For me, with a standard Python install, 'use tix' would be a good answer. After thanking the respondent, you could try answering 'why' ('I am using a custom build.'). Just remember that python-list and mirrors are like the Wild West: you may get a mix of bullets and beans. I am adding gpolo to nosy in case he can say something.
msg120518 - (view) Author: Hirokazu Yamamoto (ocean-city) * (Python committer) Date: 2010-11-05 17:52
I think issue4 happens because all frames are grid-forgotten
in redisp(), sometimes widget becomes empty. I think we can
close this issue as invalid.

P.S. Try this change in redisp()

        yy = 0
        for xx in self.frms[start:self.maxdisp+start]:
            xx.grid(in_=self,row=yy,column=0)
            yy += 1
        for xx in self.frms[self.active:self.maxdisp+self.active]:
            if xx in self.frms[start:self.maxdisp+start]:
                continue
            xx.grid_forget()
msg120519 - (view) Author: Robert Lerche (Robert.Lerche) Date: 2010-11-05 18:18
Thank you, Hirokazu!  I see now -- deleting the rows first causes the scroll bar to shrink.  So I take it calling grid with a row/column that is already in the grid replaces the prior mapped widget.

[or should I say, "domo arigato Yamamoto-san"?]
msg120524 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2010-11-05 19:29
Robert, I interpret your response to Hirokazu to mean that his suggestion works. Hence I am following his suggestion. Reopen is I erred.
History
Date User Action Args
2010-11-05 19:29:58terry.reedysetstatus: open -> closed
resolution: works for me
messages: + msg120524
2010-11-05 18:18:43Robert.Lerchesetmessages: + msg120519
2010-11-05 17:52:33ocean-citysetnosy: + ocean-city
messages: + msg120518
2010-11-01 20:46:49terry.reedysetnosy: + gpolo
messages: + msg120167
2010-11-01 19:55:12Robert.Lerchesetmessages: + msg120157
2010-10-30 01:50:54terry.reedysetmessages: + msg119952
versions: + Python 3.1, Python 3.2
2010-10-29 22:27:11Robert.Lerchesetmessages: + msg119944
2010-10-29 22:10:43terry.reedysetnosy: + terry.reedy
messages: + msg119940
2010-10-29 15:39:46Robert.Lerchecreate