我正在尝试学习使用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()
即使退出和帮助按钮也不合适...... !!!
答案 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不会太宽。