Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #102104 > unrolled thread
| Started by | KP <kai.peters@gmail.com> |
|---|---|
| First post | 2016-01-25 19:41 -0800 |
| Last post | 2016-01-27 07:48 +0100 |
| Articles | 7 — 4 participants |
Back to article view | Back to comp.lang.python
Tkinter spacing KP <kai.peters@gmail.com> - 2016-01-25 19:41 -0800
Re: Tkinter spacing Peter Otten <__peter__@web.de> - 2016-01-26 09:07 +0100
Re: Tkinter spacing high5storage@gmail.com - 2016-01-26 07:55 -0800
Re: Tkinter spacing Peter Otten <__peter__@web.de> - 2016-01-26 17:39 +0100
Re: Tkinter spacing high5storage@gmail.com - 2016-01-26 14:48 -0800
Re: Tkinter spacing Christian Gollwitzer <auriocus@gmx.de> - 2016-01-27 07:50 +0100
Re: Tkinter spacing Christian Gollwitzer <auriocus@gmx.de> - 2016-01-27 07:48 +0100
| From | KP <kai.peters@gmail.com> |
|---|---|
| Date | 2016-01-25 19:41 -0800 |
| Subject | Tkinter spacing |
| Message-ID | <e8736485-c4d6-4868-8da1-64ada4767bc1@googlegroups.com> |
If I want to have some space between, say, btn_last & btn_new, will I have to use a dummy label in between these two or is there a better way?
Thanks for any help, as always!
from tkinter import *
from tkinter import ttk
root = Tk()
root.geometry("822x600+100+100")
nav_bar = ttk.Frame(root, borderwidth=2, relief='ridge', padding=(10, 3, 10, 3))
btn_first = ttk.Button(nav_bar, text='|<', width=4) # for buttons showing text only, this will be text units (= average characters?)
btn_prev = ttk.Button(nav_bar, text='<', width=4) # for image buttons, it will be in pixels
btn_next = ttk.Button(nav_bar, text='>', width=4)
btn_last = ttk.Button(nav_bar, text='>|', width=4)
btn_new = ttk.Button(nav_bar, text='New')
btn_edit = ttk.Button(nav_bar, text='Edit')
btn_delete = ttk.Button(nav_bar, text='Delete')
btn_cancel = ttk.Button(nav_bar, text='Cancel')
btn_print = ttk.Button(nav_bar, text='Print')
btn_help = ttk.Button(nav_bar, text='Help')
btn_save = ttk.Button(nav_bar, text='Save')
lbl_Recs = ttk.Label(nav_bar, text='Records')
lbl_RCount = ttk.Label(nav_bar, text='0 ', width=10, borderwidth=2, relief='sunken', anchor='e') # fake entry look
nav_bar.grid(column=0, row=0, columnspan=13)
btn_first.grid(column=0, row=0)
btn_prev.grid(column=1, row=0)
btn_next.grid(column=2, row=0)
btn_last.grid(column=3, row=0)
btn_new.grid(column=4, row=0)
btn_edit.grid(column=5, row=0)
btn_delete.grid(column=6, row=0)
btn_cancel.grid(column=7, row=0)
lbl_Recs.grid(column=8, row=0, padx=5)
lbl_RCount.grid(column=9, row=0, padx=5)
btn_print.grid(column=10, row=0)
btn_help.grid(column=11, row=0)
btn_save.grid(column=12, row=0)
root.mainloop()
[toc] | [next] | [standalone]
| From | Peter Otten <__peter__@web.de> |
|---|---|
| Date | 2016-01-26 09:07 +0100 |
| Message-ID | <mailman.1.1453795699.2338.python-list@python.org> |
| In reply to | #102104 |
KP wrote:
> If I want to have some space between, say, btn_last & btn_new, will I have
> to use a dummy label in between these two or is there a better way?
>
> Thanks for any help, as always!
You could use nested frames with nonzero padding, e. g:
nav_bar = ttk.Frame(root, borderwidth=2, relief='ridge', padding=(0, 3))
nav_bar1 = ttk.Frame(nav_bar, padding=(5, 0))
nav_bar1.pack(side=LEFT)
btn_first = ttk.Button(nav_bar1, text='|<', width=4)
btn_first.grid(column=0, row=0)
...
nav_bar2 = ttk.Frame(nav_bar, padding=(5, 0))
nav_bar2.pack(side=LEFT)
btn_new = ttk.Button(nav_bar2, text='New')
btn_new.grid(column=0, row=0)
...
> from tkinter import *
> from tkinter import ttk
>
> root = Tk()
> root.geometry("822x600+100+100")
> nav_bar = ttk.Frame(root, borderwidth=2, relief='ridge', padding=(10, 3,
> 10, 3))
>
> btn_first = ttk.Button(nav_bar, text='|<', width=4) # for buttons
> showing text only, this will be text units (= average characters?)
> btn_prev = ttk.Button(nav_bar, text='<', width=4) # for image buttons,
> it will be in pixels
> btn_next = ttk.Button(nav_bar, text='>', width=4)
> btn_last = ttk.Button(nav_bar, text='>|', width=4)
> btn_new = ttk.Button(nav_bar, text='New')
> btn_edit = ttk.Button(nav_bar, text='Edit')
> btn_delete = ttk.Button(nav_bar, text='Delete')
> btn_cancel = ttk.Button(nav_bar, text='Cancel')
> btn_print = ttk.Button(nav_bar, text='Print')
> btn_help = ttk.Button(nav_bar, text='Help')
> btn_save = ttk.Button(nav_bar, text='Save')
> lbl_Recs = ttk.Label(nav_bar, text='Records')
> lbl_RCount = ttk.Label(nav_bar, text='0 ', width=10, borderwidth=2,
> relief='sunken', anchor='e') # fake entry look
>
> nav_bar.grid(column=0, row=0, columnspan=13)
>
> btn_first.grid(column=0, row=0)
> btn_prev.grid(column=1, row=0)
> btn_next.grid(column=2, row=0)
> btn_last.grid(column=3, row=0)
>
> btn_new.grid(column=4, row=0)
> btn_edit.grid(column=5, row=0)
> btn_delete.grid(column=6, row=0)
> btn_cancel.grid(column=7, row=0)
>
> lbl_Recs.grid(column=8, row=0, padx=5)
> lbl_RCount.grid(column=9, row=0, padx=5)
> btn_print.grid(column=10, row=0)
> btn_help.grid(column=11, row=0)
> btn_save.grid(column=12, row=0)
>
> root.mainloop()
[toc] | [prev] | [next] | [standalone]
| From | high5storage@gmail.com |
|---|---|
| Date | 2016-01-26 07:55 -0800 |
| Message-ID | <9ce727b5-db2d-41a1-ab51-e32f8ec614c8@googlegroups.com> |
| In reply to | #102104 |
On Monday, January 25, 2016 at 7:41:57 PM UTC-8, KP wrote:
> If I want to have some space between, say, btn_last & btn_new, will I have to use a dummy label in between these two or is there a better way?
>
> Thanks for any help, as always!
>
>
>
>
> from tkinter import *
> from tkinter import ttk
>
> root = Tk()
> root.geometry("822x600+100+100")
> nav_bar = ttk.Frame(root, borderwidth=2, relief='ridge', padding=(10, 3, 10, 3))
>
> btn_first = ttk.Button(nav_bar, text='|<', width=4) # for buttons showing text only, this will be text units (= average characters?)
> btn_prev = ttk.Button(nav_bar, text='<', width=4) # for image buttons, it will be in pixels
> btn_next = ttk.Button(nav_bar, text='>', width=4)
> btn_last = ttk.Button(nav_bar, text='>|', width=4)
> btn_new = ttk.Button(nav_bar, text='New')
> btn_edit = ttk.Button(nav_bar, text='Edit')
> btn_delete = ttk.Button(nav_bar, text='Delete')
> btn_cancel = ttk.Button(nav_bar, text='Cancel')
> btn_print = ttk.Button(nav_bar, text='Print')
> btn_help = ttk.Button(nav_bar, text='Help')
> btn_save = ttk.Button(nav_bar, text='Save')
> lbl_Recs = ttk.Label(nav_bar, text='Records')
> lbl_RCount = ttk.Label(nav_bar, text='0 ', width=10, borderwidth=2, relief='sunken', anchor='e') # fake entry look
>
> nav_bar.grid(column=0, row=0, columnspan=13)
>
> btn_first.grid(column=0, row=0)
> btn_prev.grid(column=1, row=0)
> btn_next.grid(column=2, row=0)
> btn_last.grid(column=3, row=0)
>
> btn_new.grid(column=4, row=0)
> btn_edit.grid(column=5, row=0)
> btn_delete.grid(column=6, row=0)
> btn_cancel.grid(column=7, row=0)
>
> lbl_Recs.grid(column=8, row=0, padx=5)
> lbl_RCount.grid(column=9, row=0, padx=5)
> btn_print.grid(column=10, row=0)
> btn_help.grid(column=11, row=0)
> btn_save.grid(column=12, row=0)
>
> root.mainloop()
Hmm - this only gives me an empty window (no errors).
What puzzles me that every book/site on tkinter strongly warns of mixing pack and grid managers...
Any ideas?
[toc] | [prev] | [next] | [standalone]
| From | Peter Otten <__peter__@web.de> |
|---|---|
| Date | 2016-01-26 17:39 +0100 |
| Message-ID | <mailman.20.1453826400.2338.python-list@python.org> |
| In reply to | #102127 |
high5storage@gmail.com wrote:
>> from tkinter import *
>> from tkinter import ttk
>>
>> root = Tk()
>> root.geometry("822x600+100+100")
>> nav_bar = ttk.Frame(root, borderwidth=2, relief='ridge', padding=(10, 3,
>> 10, 3))
>>
>> btn_first = ttk.Button(nav_bar, text='|<', width=4) # for buttons
>> root.mainloop()
>
> Hmm - this only gives me an empty window (no errors).
That's strange.
If you ran the script in Idle, try again from the commandline.
> What puzzles me that every book/site on tkinter strongly warns of mixing
> pack and grid managers...
You can mix pack and grid for one window, but you have to pick one layout
manager per parent widget:
top = Toplevel(root)
panel = Frame(top)
panel.pack(...)
# we picked pack() and now have to use it for all
# children of top
canvas = Canvas(top, ...)
canvas.pack(...) # must use pack() again
# we are free to pick a layout for panel
ok = Button(panel)
ok.grid(...)
# we picked grid() and now have to use it for all
# children of panel
cancel = Button(panel)
cancel.grid(...) # must use grid()
[toc] | [prev] | [next] | [standalone]
| From | high5storage@gmail.com |
|---|---|
| Date | 2016-01-26 14:48 -0800 |
| Message-ID | <b9776059-d644-45ef-a95f-f57017ccaa4d@googlegroups.com> |
| In reply to | #102104 |
On Monday, January 25, 2016 at 7:41:57 PM UTC-8, KP wrote:
> If I want to have some space between, say, btn_last & btn_new, will I have to use a dummy label in between these two or is there a better way?
>
> Thanks for any help, as always!
>
>
>
>
> from tkinter import *
> from tkinter import ttk
>
> root = Tk()
> root.geometry("822x600+100+100")
> nav_bar = ttk.Frame(root, borderwidth=2, relief='ridge', padding=(10, 3, 10, 3))
>
> btn_first = ttk.Button(nav_bar, text='|<', width=4) # for buttons showing text only, this will be text units (= average characters?)
> btn_prev = ttk.Button(nav_bar, text='<', width=4) # for image buttons, it will be in pixels
> btn_next = ttk.Button(nav_bar, text='>', width=4)
> btn_last = ttk.Button(nav_bar, text='>|', width=4)
> btn_new = ttk.Button(nav_bar, text='New')
> btn_edit = ttk.Button(nav_bar, text='Edit')
> btn_delete = ttk.Button(nav_bar, text='Delete')
> btn_cancel = ttk.Button(nav_bar, text='Cancel')
> btn_print = ttk.Button(nav_bar, text='Print')
> btn_help = ttk.Button(nav_bar, text='Help')
> btn_save = ttk.Button(nav_bar, text='Save')
> lbl_Recs = ttk.Label(nav_bar, text='Records')
> lbl_RCount = ttk.Label(nav_bar, text='0 ', width=10, borderwidth=2, relief='sunken', anchor='e') # fake entry look
>
> nav_bar.grid(column=0, row=0, columnspan=13)
>
> btn_first.grid(column=0, row=0)
> btn_prev.grid(column=1, row=0)
> btn_next.grid(column=2, row=0)
> btn_last.grid(column=3, row=0)
>
> btn_new.grid(column=4, row=0)
> btn_edit.grid(column=5, row=0)
> btn_delete.grid(column=6, row=0)
> btn_cancel.grid(column=7, row=0)
>
> lbl_Recs.grid(column=8, row=0, padx=5)
> lbl_RCount.grid(column=9, row=0, padx=5)
> btn_print.grid(column=10, row=0)
> btn_help.grid(column=11, row=0)
> btn_save.grid(column=12, row=0)
>
> root.mainloop()
Ah - that clears it up. Thanks for your help!
[toc] | [prev] | [next] | [standalone]
| From | Christian Gollwitzer <auriocus@gmx.de> |
|---|---|
| Date | 2016-01-27 07:50 +0100 |
| Message-ID | <n89p5m$vo3$2@dont-email.me> |
| In reply to | #102139 |
Am 26.01.16 um 23:48 schrieb high5storage@gmail.com: > On Monday, January 25, 2016 at 7:41:57 PM UTC-8, KP wrote: > > [fullquote snipped] > Ah - that clears it up. Thanks for your help! It is totally unclear what you reply to. PLease cite what you refer to, and shorten your citation for clarity. Christian
[toc] | [prev] | [next] | [standalone]
| From | Christian Gollwitzer <auriocus@gmx.de> |
|---|---|
| Date | 2016-01-27 07:48 +0100 |
| Message-ID | <n89p39$vo3$1@dont-email.me> |
| In reply to | #102104 |
Am 26.01.16 um 04:41 schrieb KP:
> If I want to have some space between, say, btn_last & btn_new, will
> I have to use a dummy label in between these two or is there a better way?
If you just want to put space there, you can use the pad options of
grid, just like you do for lbl_Recs. Specifically, if you want to put it
on one side only, you'd do:
btn_new.grid(column=4, row=0, padx="20 0")
which does 20px of space to the left of btn_new. Besides that, I have a
few comments (I assume you are new to Tkinter and/or GUI programming in
general)
> from tkinter import *
> from tkinter import ttk
>
> root = Tk()
> root.geometry("822x600+100+100")
This is very bad. The grid geometry manager calculates the needed space
automatically. Your code fails, if you use a different ttk theme, or a
different font size. For instance, on my OSX computer, the window is cut
off at the right side at the Print button. Delete this line. As soon as
you fill the bottom with content, the window will look reasonanble.
> nav_bar = ttk.Frame(root, borderwidth=2, relief='ridge', padding=(10, 3, 10, 3))
>
> btn_first = ttk.Button(nav_bar, text='|<', width=4) # for buttons showing text only, this will be text units (= average characters?)
> btn_prev = ttk.Button(nav_bar, text='<', width=4) # for image buttons, it will be in pixels
> btn_next = ttk.Button(nav_bar, text='>', width=4)
> btn_last = ttk.Button(nav_bar, text='>|', width=4)
If you want these buttons to look like a real Toolbur, there is a ttk
widget class for that. Try:
btn_first = ttk.Button(nav_bar, text='|<', style="Toolbutton")
btn_prev = ttk.Button(nav_bar, text='<', style="Toolbutton")
btn_next = ttk.Button(nav_bar, text='>', style="Toolbutton")
btn_last = ttk.Button(nav_bar, text='>|', style="Toolbutton")
Also note that I left off the manual width. Probably you wwant to use
images in the end, and if these all have the same size, which is usual
for an icon set (32x32 or 48x48, e.g.) then the size of all the buttons
will look good. You shouldn't have to set size values manually.
> btn_new = ttk.Button(nav_bar, text='New')
> btn_edit = ttk.Button(nav_bar, text='Edit')
> btn_delete = ttk.Button(nav_bar, text='Delete')
> btn_cancel = ttk.Button(nav_bar, text='Cancel')
> btn_print = ttk.Button(nav_bar, text='Print')
> btn_help = ttk.Button(nav_bar, text='Help')
> btn_save = ttk.Button(nav_bar, text='Save')
> lbl_Recs = ttk.Label(nav_bar, text='Records')
> lbl_RCount = ttk.Label(nav_bar, text='0 ', width=10, borderwidth=2, relief='sunken', anchor='e') # fake entry look
This will also look correct only with some themes. Maybe you want a
readonly or disabled entry? You can do this like
sometkvar=Tk.StringVar()
lbl_RCount = ttk.Entry(nav_bar, textvariable=sometkvar, width=10,
state='readonly')
sometkvar.set('0 ')
> nav_bar.grid(column=0, row=0, columnspan=13)
There is no need to give the nav_bar a columnspan. So far you have no
elements in the main frame besides the nav_bar. Columnspan=13 would mean
that the navbar should be the same size as 13 columns below it. You
don't tell it the number of children (your buttons) here. So for the
moment just
nav_bar.grid(column=0, row=0)
HTH,
Christian
[toc] | [prev] | [standalone]
Back to top | Article view | comp.lang.python
csiph-web