在TkInter中创建计算器,文本框挤压按钮

-2 投票
1 回答
1239 浏览
提问于 2025-04-18 17:46

我正在尝试用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 个回答

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() 

撰写回答