无法将Entry框设置为在python中更正位置

时间:2015-08-21 11:18:26

标签: python-2.7 tkinter

我正在尝试学习使用Tkinter创建GUI。我创建了一个窗口,其中包括文本,Messagebox,Entry小部件,标签和单选按钮。

我在帧中使用了网格方法,并尝试在第0行和第1行中创建输入框。并在消息框中显示了一些文本。但是这些未正确对齐,即使我给出了正确的行和列但输出不是有序的。 / p>

创建条目框虽然我提到了column1。但是根据指定的列创建了消息框。任何人都可以帮我解决这个问题。如果我遗漏了什么,请现在就让我。

from Tkinter import*
import tkMessageBox


class Example:
    def __init__(self,root):
        root.title("Sample")
        #Entry functions ---------------------------------------
        Label(root, text="First Name").grid(row=0)
        Label(root, text="Last Name").grid(row=1)
        self.e1 = Entry(root)
        self.e1.bind("<Return>",self.ShowChoice_radio)
        self.e2 = Entry(root)
        self.e2.bind("<Return>",self.ShowChoice_radio)
        self.e1.grid(row=0,column=1)
        self.e2.grid(row =1,column = 1)
        #------------------------------------------------------------------------
        self.frame=Frame(root)
        self.frame.grid(row=3,sticky=W)
        self.label=Label(self.frame, text="mine", width=12,bg="green",fg="white",justify=LEFT)

        self.label.grid(row=3,column=4,sticky=W,pady=4)
        root.minsize(width=666, height=220)
        self.v=IntVar()
        role=[("ENGLISH",1),("SPANISH",2),("GERMAN",3)]
        Label(self.frame,text="Choose your role of target:",justify=LEFT,padx=2,pady=2).grid(row=4,sticky=W)
        i=0
        for txt,val in role:
            i=i+1
            self.rad_bt=Radiobutton(self.frame,text=txt,padx=20,variable=self.v,
                        command=self.ShowChoice_radio,value=val)
            self.rad_bt.grid(row=4,column=i+1)

        self.bottomframe = Frame(root)
        self.bottomframe.grid(row=12,sticky=W)
        self.hello(12)
        T=Text(self.bottomframe,height=2,width=30)
        T.pack(padx=100,side=TOP)
        T.insert(END,"just a normal text to display!\n")
        self.mbutton=Button(self.bottomframe,text='Quit',command=self.callback,state='normal')
        self.mbutton.pack(padx=3,pady=3,side='left')
        self.help=Button(self.bottomframe,text='Help',command=self.help_msg,width=5,justify=CENTER)
        self.help.pack(padx=93,pady=3,side='left')

    def ShowChoice_radio(self):
        print self.v.get()

    def help_msg(self):
        tkMessageBox.showinfo("Help to print ",message="Not yet implemented")
        root.minsize(width=666, height=666)
        self.show_entry_fields()
        self.help.config(state=DISABLED)
    def callback(self):
        if tkMessageBox.askyesno('verify','Really Quit?'):
            root.destroy()

    def hello(self,name):
        w=Label(root,text="Hello Tkinter!",width=15).grid(row=10)

        whatever_you_do = "Whatever . it is my test that \n i can anble to display manner  in this case find out whether it is correct one or wrong \n)"
        msg=Message(root, anchor='s',width=200,text = whatever_you_do)
        msg.config(bg='lightgreen', font=('times', 14, 'italic'))
        msg.grid(row=10,column=1,sticky=W)
    def show_entry_fields(self):
       print "First Name: %s\nLast Name: %s" % (self.e1.get(), self.e2.get())



if __name__=="__main__":
    root=Tk()
    app=Example(root)
    root.mainloop()

即使退出和帮助按钮也不合适...... !!!

1 个答案:

答案 0 :(得分:0)

我最初投票决定关闭这个,因为没有一个明确的问题,但大多数只是一系列的陈述和意见,其中至少有一个是不正确的。在看了更多之后,我想我可以回答你的暗示问题“为什么tkinter的表现方式对我来说似乎不对?”。我相信,答案是你不明白网格坐标对于网格化的每个容器都是独立的(重新开始)。此外,忽略未使用的坐标。特别是:

Root有一个5行2列的网格。重新编号行0,1,2,3,4而不是您使用的混淆标签,第1列中没有第2行和第4行的条目。第0列的宽度由第2行中self.frame的宽度决定第0列。输入框位于右侧,因为第0列非常宽。

Self.frame有一个2行4列的网格。第0行的前3列为空。 Self.bottomframe被打包而不是网格化。按钮位于您想要的位置左侧,因为您将它们打包到左侧。换句话说,tkinter就是你所说的,这显然不是你想要的。

如果你摆脱self.frame,将'mine'放入(2,0)或(2,0),'选择......'(3,0),你可以更好地列出结果在(3,1)中有3个无线电接管的框架。然后根列0不会太宽。