Tkinter Label alignment problem using OS 10.6

A

AJ

Dear users,

I have written a sample program that ran correctly with earlier than
Mac OS 10.6. The answer field Label does not align correctly. I
downloaded the latest Python 2.7 release but still did not solve the
problem. Look for line "L4.place(relx=0.32,rely=0.56, anchor=W)"

#!/usr/bin/env python

from Tkinter import *
from tkMessageBox import *
import sys


win = Tk()
#win.tk.call('console', 'hide')
try:
win.tk.call('after','idle','console','hide')
except TclError:
pass
ScreenX = win.winfo_screenwidth()
ScreenY = win.winfo_screenheight()
ScreenX = (ScreenX/2) - 250
ScreenY = (ScreenY/2) - 200
win.geometry('500x300%+d%+d' %(ScreenX, ScreenY))
win.title("'Place' Geometry Test")
win.resizable(width=False, height=False)

FirstN = StringVar()
SecondN = StringVar()
Answer = StringVar()

Verd12 = ("Verdana","11")
Verd16 = ("Verdana","16")
Verd25 = ("Verdana","25")
Sys16 = ("System" ,"16")


#----------------- AboutDialog ----------------------------

class AboutDialog(Toplevel):

def __init__(self, parent):
Toplevel.__init__(self, parent)
self.configure(bg = 'white', borderwidth=3)
self.geometry('200x300%+d%+d' %(ScreenX, ScreenY))
self.title('About...')
self.resizable(height=FALSE, width=FALSE)
self.transient(parent)
self.grab_set()
self.protocol("WM_DELETE_WINDOW", self.OkToExit)
self.parent = parent
self.FillDialog()
self.Btn.focus_set()
self.bind('<Return>',self.OkToExit)
self.bind('<Escape>',self.OkToExit)
self.bind('<Command-KeyPress-Q>', Done)
self.bind('<Command-KeyPress-q>', Done)

self.wait_window()

def FillDialog(self):

self.AboutText = "\n\n\nPlace Geometry Test\n\nBy\n\nAmin
Aljuffali"
self.Lbl = Label(self, text=self.AboutText, font=Verd16, bg =
'white')
self.Lbl.pack(side=TOP)
self.Lb2 = Label(self, text="April 1, 2007", height = 1,
font=Verd12, bg = 'white')
self.Lb2.pack(side=TOP)
self.Lb3 = Label(self, text=" ", height = 3, font=Verd12, bg =
'white')
self.Lb3.pack(side=TOP)
self.Btn = Button(self, text='Done', font=Sys16, width=8,
height=1, command=self.OkToExit)
self.Btn.pack(side=TOP)
self.Lb4 = Label(self, text=" ", height = 3, font=Verd12, bg =
'white')
self.Lb4.pack(side=BOTTOM)
self.update()

def OkToExit(self, event=None):
self.destroy()

#----------------------------------------------------------

def ShowDialog():
AboutDialog(win)

def done():
win.destroy()
win.quit

def Done(e):
win.destroy()
win.quit


def CheckAlfanumeric(x):

if x == '':
return False
for ch in x:
if ch not
in['.','-','+','0','1','2','3','4','5','6','7','8','9','e','E']:
return False
return True


def Multiply():

#global FirstN, SecondN, Answer

try:
a = FirstN.get().strip()
if not CheckAlfanumeric(a):
raise ValueError

b = SecondN.get().strip()
if not CheckAlfanumeric(b):
raise ValueError

FirstN.set(a)
SecondN.set(b)
Answer.set(str(float(a) * float(b)))

except ValueError:
showwarning("Warning...","Input Error!")

return

def MakeToplevelMenu(topwin):

top = Menu(topwin)
topwin.config(menu=top)

if sys.platform == 'darwin' and '.app' in sys.executable:
application = Menu(top, name='apple')
application.add_command(label='About...', command=ShowDialog,
underline=0)
top.add_cascade(label='PlaceTest', menu=application,
underline=0)

fileMenu = Menu(top, tearoff=0)
fileMenu.add_command(label='Exit', command=done, underline=0)
top.add_cascade(label='File', menu=fileMenu, underline=0)

helpMenu = Menu(top, tearoff=0)
helpMenu.add_command(label='About...', command=ShowDialog,
underline=0)
top.add_cascade(label='Help', menu=helpMenu, underline=0)

return


MakeToplevelMenu(win)

L1 = Label(win, text='Multiply Two Numbers', font=Verd25, bg =
'white')
L2 = Label(win, text='First Number:', font=Verd16, bg = 'white')
L3 = Label(win, text='Second Number:', font=Verd16, bg = 'white')
L4 = Label(win, text='', textvariable=Answer, font=Sys16, bg =
'white', bd=1, width=20, height=1, anchor=W, relief=SOLID)
L5 = Label(win, text='Written by Amin Aljuffali', font=Verd12,padx=2,
bg = 'white', anchor=W, relief=FLAT)
B1 = Button(win, text='Multiply', font=Sys16, width=19, height=1,
command=Multiply)
B2 = Button(win, text='Quit', font=Sys16, width=19, height=1,
command=done)
F1 = Frame(win, relief=FLAT, bd=0, bg='#336699')
F2 = Frame(win, relief=FLAT, bd=0, bg='#336699')
F3 = Frame(win, relief=FLAT, bd=0, bg='#336699')

E1 = Entry(win, textvariable=FirstN, relief=SOLID, font=Sys16, bg =
'white',bd=1)
E2 = Entry(win, textvariable=SecondN, relief=SOLID, font=Sys16, bg =
'white', bd=1)

win.bind('<Command-KeyPress-q>', Done)
win.bind('<Command-KeyPress-Q>', Done)

F1.place(relx=0.0,rely=0.01, anchor=NW, width=600, height=5)
L1.place(relx=0.5,rely=0.09, anchor=CENTER)
F2.place(relx=0.0,rely=0.16, anchor=NW, width=600, height=5)
E1.place(relx=0.32,rely=0.32, anchor=W)
E2.place(relx=0.32,rely=0.44, anchor=W)
L2.place(relx=0.3,rely=0.32, anchor=E)
L3.place(relx=0.3,rely=0.44, anchor=E)
L4.place(relx=0.32,rely=0.56, anchor=W)
B1.place(relx=0.525,rely=0.69, anchor=CENTER)
B2.place(relx=0.525,rely=0.81, anchor=CENTER)
F3.place(relx=0.0,rely=0.9, anchor=W, width=600, height=5)
L5.place(relx=0.01,rely=0.95, anchor=W)


E1.focus_set()
win.update()
win.mainloop()
sys.exit(0)
 
R

rantingrick

Dear users,

I have written a sample program that ran correctly with earlier than
Mac OS 10.6. The answer field Label does not align correctly. I
downloaded the latest Python 2.7 release but still did not solve the
problem.  Look for line "L4.place(relx=0.32,rely=0.56, anchor=W)"


DO YOURSELF A HUGE FAVOR AJ... Learn how to use the "pack" and "grid"
geometry managers available in Tkinter before it's too late. Well,
unless of course your a sadist. In that case just ignore my post
completely. 8^O

http://effbot.org/tkinterbook/tkinter-index.htm#introduction
 
A

AJ

DO YOURSELF A HUGE FAVOR AJ... Learn how to use the "pack" and "grid"
geometry managers available in Tkinter before it's too late. Well,
unless of course your a sadist. In that case just ignore my post
completely. 8^O

http://effbot.org/tkinterbook/tkinter-index.htm#introduction

I know the pack and grid. They do not allow me to position my widget
the way I want.
You have to go back to first grade and relearn the phrase “If you have
nothing nice to say do not say anything at all”.
 
P

Peter Otten

AJ said:
I have written a sample program that ran correctly with earlier than
Mac OS 10.6. The answer field Label does not align correctly. I
downloaded the latest Python 2.7 release but still did not solve the
problem. Look for line "L4.place(relx=0.32,rely=0.56, anchor=W)"

The underlying Tcl/Tk is more likely to be the cause of your problem, so
you'd have to look at that.

I'm on Linux with Python2.6 and Tcl/Tk 8.5, and don't see a misalignment.

Stab in the dark: try creating L4 with explicit padding:

L4 = Label(..., padx=0)

Peter

PS: Rantingrick is right; you should use one of the other geometry managers
 
R

r

PS: Rantingrick is right; you should use one of the other geometry managers

Incidentally I was actually writing a version of the OP's script using
the grid manager when i found his nasty response. So I think i'll just
keep it for me self now. Good luck AJ. ;-)
 
A

AJ

The underlying Tcl/Tk is more likely to be the cause of your problem, so
you'd have to look at that.

I'm on Linux with Python2.6 and Tcl/Tk 8.5, and don't see a misalignment.

Stab in the dark: try creating L4 with explicit padding:

L4 = Label(..., padx=0)

Peter

PS: Rantingrick is right; you should use one of the other geometry managers

Thank you Peter. I’ve tried the padding but it does not solve the
issue. It only does it with Mac OS 10.6. it works fine with Windows
and Linux and earlier Mac OS than 10.6.
To write professional GUI one needs to have full control over the
placement of the Widgets. Some programmers have switched to wxPython
because of this issue and I am trying not to.
 
A

AJ

Incidentally I was actually writing a version of the OP's script using
the grid manager when i found his nasty response. So I think i'll just
keep it for me self now. Good luck AJ. ;-)

Thank you. Do not let it get to you. There are some people like that.
If you have an idea or need help do not be distracted by this. Just
post it and hope someone can help you. This is more beneficial for you
and others who have the same questions and some day you may be helping
others. Cheers!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,534
Members
45,007
Latest member
OrderFitnessKetoCapsules

Latest Threads

Top