Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!news.albasani.net!rt.uk.eu.org!newsfeed.xs4all.nl!newsfeed3a.news.xs4all.nl!xs4all!newsgate.cistron.nl!newsgate.news.xs4all.nl!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.001 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'column': 0.07; 'tkinter': 0.07; 'subject:help': 0.08; 'buttons': 0.09; 'grid': 0.09; 'received:80.91': 0.09; 'received:80.91.229': 0.09; 'received:gmane.org': 0.09; 'received:list': 0.09; 'screen.': 0.09; 'def': 0.12; 'jan': 0.12; 'wrote': 0.14; "'0'": 0.16; '0),': 0.16; '1),': 0.16; '2),': 0.16; 'buttons,': 0.16; 'calculator': 0.16; 'cmd': 0.16; 'labelled': 0.16; 'lambda': 0.16; 'lambda:': 0.16; 'loop.': 0.16; 'pressing': 0.16; 'received:80.91.229.3': 0.16; 'received:plane.gmane.org': 0.16; 'reedy': 0.16; 'subject:Tkinter': 0.16; 'tk()': 0.16; 'fix': 0.17; 'wrote:': 0.18; 'bit': 0.19; 'app': 0.19; 'import': 0.22; 'header:User- Agent:1': 0.23; 'number)': 0.24; 'why.': 0.24; 'non': 0.24; 'sort': 0.25; 'code:': 0.26; 'gets': 0.27; 'header:X-Complaints- To:1': 0.27; 'header:In-Reply-To:1': 0.27; 'tried': 0.27; 'idea': 0.28; 'label': 0.30; 'code': 0.31; "skip:' 10": 0.31; 'stuff': 0.32; 'skip:# 10': 0.33; 'basic': 0.35; 'but': 0.35; 'there': 0.35; 'entry': 0.36; 'should': 0.36; 'changing': 0.37; 'half': 0.37; 'button': 0.38; 'window': 0.38; 'whatever': 0.38; 'to:addr :python-list': 0.38; 'pm,': 0.38; 'does': 0.39; 'received:71': 0.39; 'sure': 0.39; 'to:addr:python.org': 0.39; 'received:org': 0.40; 'august': 0.61; 'skip:t 30': 0.61; 'numbers': 0.61; 'show': 0.63; 'telephone': 0.63; 'skip:n 10': 0.64; 'more': 0.64; 'total': 0.65; 'here': 0.66; 'bottom': 0.67; "'2'": 0.84; "'3'": 0.84; 'layout.': 0.84; 'modify.': 0.84; 'pad': 0.84; 'received:fios.verizon.net': 0.84; 'mean.': 0.91; 'thing,': 0.91 X-Injected-Via-Gmane: http://gmane.org/ To: python-list@python.org From: Terry Reedy Subject: Re: Tkinter grid autosize help Date: Sat, 02 Aug 2014 22:16:40 -0400 References: <60f53f24-7ce7-48e5-9fed-7d9ac8841b7f@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Gmane-NNTP-Posting-Host: pool-71-175-90-87.phlapa.fios.verizon.net User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 In-Reply-To: X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 160 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1407032224 news.xs4all.nl 2867 [2001:888:2000:d::a6]:44992 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:75571 On 8/2/2014 6:53 PM, Nicholas Cannon wrote: > On Saturday, August 2, 2014 10:38:28 PM UTC+8, Nicholas Cannon wrote: >> So i have a basic calculator program and i have a label that i want to go across >> the top to show the numbers and stuff like on a normal calculator. The buttons are labelled already with numbers. Whatever stuff you meant, is not diplayed. >> The only way i can make the buttons look neat and then when i keep >> pressing one the label gets larger and then half the buttons >> move out of the screen. Since nothing gets bigger, I have no idea what you mean. >> I cant seem to fix this i have tried columnspan, columnconfigure >> and heaps of other stuff and non works it always expands. >> is there a way i can stop the grid from expanding? If I shrink the window horizontally, the minimun size is 3 columns. If I shrink vertically, bottom buttons disappear. I am not sure why. > ok here is the code: Only some of it. from tkinter import * def add(*args): print(args) > #window setup > main = Tk() > main.title('Calculator') > main.geometry('300x350') > main.resizable() > > app = Frame(main) > app.grid() > app.columnconfigure(0, weight=500) > app.columnconfigure(1, weight=500) You left out column 2. > > #number view label > number = ' ' > numberView = Label(app, text= number) > numberView.grid(row=0, column=0, columnspan=100) What you need for a changing label is number = StringVar() number.set('') numberView = Label(app, textvariable=number) but see below > #Num Pad Buttons below > num1 = '1' > button1 = Button(app, text='1', command= lambda: add(num1), width=5) > button1.grid(row=1, column=0) You are using the braindead telephone keypad layout. Calculators and number keypads have the more sensible layout 7 8 9 4 5 6 1 2 3 0 > num2 = '2' > button1 = Button(app, text='2', command= lambda: add(num2), width=5) > button1.grid(row=1, column=1) > > num3 = '3' > button1 = Button(app, text='3', command= lambda: add(num3), width=5) > button1.grid(row=1, column=2) > > num4 = '4' > button1 = Button(app, text='4', command= lambda: add(num4), width=5) > button1.grid(row=2, column=0) > > num5 = '5' > button1 = Button(app, text='5', command= lambda: add(num5), width=5) > button1.grid(row=2, column=1) > > num6 = '6' > button1 = Button(app, text='6', command= lambda: add(num6), width=5) > button1.grid(row=2, column=2) > > num7 = '7' > button1 = Button(app, text='7', command= lambda: add(num7), width=5) > button1.grid(row=3, column=0) > > num8 = '8' > button1 = Button(app, text='8', command= lambda: add(num8), width=5) > button1.grid(row=3, column=1) > > num9 = '9' > button1 = Button(app, text='9', command= lambda: add(num9), width=5) > button1.grid(row=3, column=2) > > num0 = '0' > button1 = Button(app, text='0', command= lambda: add(num0), width=5) > button1.grid(row=4, column=1) ) > This sort of repetitious code is crying for a loop. For one thing, if you want to change the buttons, there should only be one Button call to modify. Since I am still learning to write tkinter myself, I wrote the following, which I suspect does what you wanted and a bit more. from tkinter import * main = Tk() main.title('Calculator') main.geometry('300x350') #main.resizable() # does nothing app = Frame(main) app.grid() total = IntVar() total.set(0) entry = StringVar() entry.set('') Label(app, text='Total').grid(row=0, column=0) Label(app, textvariable=total).grid(row=0, column=1, columnspan=3) Label(app, text='Entry').grid(row=1, column=0) Label(app, textvariable=entry).grid(row=1, column=1, columnspan=3) def append(digit): entry.set(entry.get() + digit) def add(): total.set(total.get() + int(entry.get())) entry.set('') def sub(): total.set(total.get() - int(entry.get())) entry.set('') header_rows = 2 for num, r, c in ( ('7', 0, 0), ('8', 0, 1), ('9', 0, 2), ('4', 1, 0), ('5', 1, 1), ('6', 1, 2), ('1', 2, 0), ('2', 2, 1), ('3', 2, 2), ('0', 3, 0), ('+', 3, 1), ('-', 3, 2),): cmd = {'+':add, '-':sub}.get(num, lambda num=num: append(num)) b = Button(app, text=num, command=cmd, width=5) b.grid(row=header_rows+r, column=c) main.mainloop() -- Terry Jan Reedy