Tkinter check box behaviour - Windows / Linux discrepancy

jim-on-linux inq1ltd at verizon.net
Thu Nov 9 20:44:19 EST 2006


Peter,
You already have an answer to you question but if 
you want to fancy up your program you could 
replace;


       
self.chkTest.bind('<ButtonRelease-1>',
self.chkTest_click)
>
with
>
self.chkTest.bind('<f2>',self.chkTest_click0)

or some other acceptable key from the keyboard
>


def chkTest_click0(self,event):
    self.chkTest_click()


def chkTest_click(self):
         # read check box state and display
   appropriate text 
   if self.intTest.get()==0:
             self.lblTest.config(text='Check box
         cleared') 
   else:
             self.lblTest.config(text='Check box
 set')



jim-on-linux
http://www.inqvista.com



On Thursday 09 November 2006 18:28, peter wrote:
> I've come across a weird difference between the
> behaviour of the Tkinter checkbox in Windows
> and Linux.  The issue became apparent in some
> code I wrote to display an image in a fixed
> size canvas widget. If a checkbox was set then
> the image should be shrunk as necessary to fit
> the canvas while if cleared it should appear
> full size with scrollbars if necessary.
>
> The code worked fine under Linux (where it was
> developed).  But under Windows, the first click
> in the checkbox did nothing, then subsequent
> clicks adjusted the size according to the
> PREVIOUS, not the current, checkbox state.
>
> I've isolated the problem in the code below,
> which shows a single checkbox and a label to
> describe its state. It works ok under Linux,
> but in Windows it is always one click behind.
>
> Any ideas?  I am using
>    Linux: Fedora Core 3, Python 2.3.4
>    Windows: Windows NT, Python 2.3.4
>
> Peter
>
> ===============================================
>========================= import Tkinter as tk
>
>
>
> class App:
>
>     def __init__(self,frmMain):
>
>         """
>         Demonstrate difference in Windows /
> Linux handling of check box
>
>         Text in lblTest should track check box
> state """
>
>         # Set up form
>
>         self.intTest=tk.IntVar()
>
>        
> self.chkTest=tk.Checkbutton(frmMain,text='Click
> me!',variable=self.intTest)
>
>        
> self.chkTest.grid(row=0,column=0,padx=5,pady=5,
>sticky=tk.W)
>
>        
> self.chkTest.bind('<ButtonRelease-1>',self.chkT
>est_click)
>
>
>
>        
> self.lblTest=tk.Label(frmMain,text='Dummy')
>
>        
> self.lblTest.grid(row=1,column=0,padx=5,pady=5,
>sticky=tk.W)
>
>
>         self.chkTest_click() # so as to
> initialise text
>
>     def chkTest_click(self,event=None):
>         # read check box state and display
> appropriate text if self.intTest.get()==0:
>             self.lblTest.config(text='Check box
> cleared') else:
>             self.lblTest.config(text='Check box
> set')
>
>
>
>
> if __name__=='__main__':
>
>     frmMain=tk.Tk()
>
>     app=App(frmMain)
>
>     frmMain.mainloop()



More information about the Python-list mailing list