-2

我正在尝试使用 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)
4

1 回答 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() 
于 2014-08-19T10:23:15.287 回答