在TkInter中创建计算器,文本字段替换按钮

时间:2014-08-19 10:14:19

标签: python user-interface grid tkinter calc

我试图在tkinter中使用网格格式制作计算器,但文本字段正在取代按钮。

我是Python的初学者而且只是卡住了。

这是我的源代码部分:

from Tkinter import*


#function for about menu 
def about():
    win2=Tk()
    win2.wm_title("About")
    l=Label(win2,text=" CAL-C ver 1.0 \n Developer. \n Mohd Sanad",padx=5,pady=40)
    l.pack()

win=Tk()#creating window
win.wm_title("CAL-C")#changing window title
#Initiliazing about menu button
menubar=Menu(win)
menubar.add_command(label="About",command=about)
win.config(menu=menubar)


v=StringVar()
e=Entry(win,textvariable=v)
e.grid(row=0,column=0,columnspan=3,sticky=W+E)
b1=Button(win,text="1")
b2=Button(win,text="2")
b3=Button(win,text="3")
b4=Button(win,text="4")
b5=Button(win,text="5")
b6=Button(win,text="6")
b7=Button(win,text="7")
b8=Button(win,text="8")
b9=Button(win,text="9")
b1.grid(row=1,column=0)
b2.grid(row=1,column=1)
b3.grid(row=1,column=2)
b4.grid(row=2,column=0)
b5.grid(row=2,column=1)
b6.grid(row=2,column=2)
b7.grid(row=3,column=0)
b8.grid(row=3,column=1)
b9.grid(row=3,column=2)

1 个答案:

答案 0 :(得分:1)

下面的教程可以很好地了解如何在TkInter中使用不同的布局管理器,还有一个如何创建计算器的示例。

http://zetcode.com/gui/tkinter/layout/

修改

我认为文本字段替换按钮的原因是因为输入字段和三个第一个按钮放在同一行中,并且没有为文本字段指定列。我认为这会导致输入字段默认为0列,因此取代按钮。

您可以尝试将输入字段放在其自己的行中,并使用columnspan将其拉伸到多个列上,并添加sticky = W + E以使其在列中展开,如下所示:

v=StringVar()
e=Entry(win,textvariable=v)
# the columnspan make the entry widget strech over more columns
e.grid(row=0, column=0, columnspan=4, sticky=W+E)

b1.grid(row=1,column=0, sticky=W+E)
b2.grid(row=1,column=1, sticky=W+E)
b3.grid(row=1,column=2, sticky=W+E)
b4.grid(row=2,column=0, sticky=W+E)
b5.grid(row=2,column=1, sticky=W+E)
b6.grid(row=2,column=2, sticky=W+E)
b7.grid(row=3,column=0, sticky=W+E)
b8.grid(row=3,column=1, sticky=W+E)
b9.grid(row=3,column=2, sticky=W+E)

以下示例在我的计算机上正确呈现:

from Tkinter import Tk, W, E
from ttk import Frame, Button, Label, Style
from ttk import Entry

class Example(Frame):
     def __init__(self, parent):
        Frame.__init__(self, parent)   
        self.parent = parent
        self.initUI()

 def initUI(self):
    e=Entry(self)
    b1 = Button(self, text="1")
    b2 = Button(self, text="2")
    b3 = Button(self, text="3")
    b4 = Button(self, text="4")
    b5 = Button(self, text="5")
    b6 = Button(self, text="6")
    b7 = Button(self, text="7")
    b8 = Button(self, text="8")
    b9 = Button(self, text="9")

    e.grid(row=0, column=0, columnspan=4, sticky=W+E)
    b1.grid(row=1,column=0)
    b2.grid(row=1,column=1)
    b3.grid(row=1,column=2)
    b4.grid(row=2,column=0)
    b5.grid(row=2,column=1)
    b6.grid(row=2,column=2)
    b7.grid(row=3,column=0)
    b8.grid(row=3,column=1)
    b9.grid(row=3,column=2)

    self.pack()

def main():

    root = Tk()
    app = Example(root)
    root.mainloop()  

if __name__ == '__main__':
    main()