2015-04-12 54 views
0

应用包()所以,我试图让使用Tkinter的首次蟒蛇一个GUI,但我有与Pack()属性的麻烦。Python的Tkinter的:如何在对象

我的GUI代码迄今如下:

mainframe = tk.Tk() 
mainframe.title("Hostname2IP") 
mainframe.columnconfigure(1, weight=1) 
mainframe.rowconfigure(1, weight=1) 

SC= tk.scrolledtext.ScrolledText #shorten code a bit... 
SC(master=mainframe, wrap=tk.WORD, width=5, height=15).grid(column=1, row=1, sticky=("NSEW")) 
SC(master=mainframe, wrap=tk.WORD, width=5, height=15).grid(column=2, row=1, sticky=("NSEW")) 
SC(master=mainframe, wrap=tk.WORD, width=5, height=15).grid(column=3, row=1, sticky=("NSEW")) 

L1 = tk.Label(master=mainframe, text="Label1").grid(column=1, row=1, sticky="S") 
L1 = tk.Label(master=mainframe, text="Label2").grid(column=2, row=1, sticky="S") 
L1 = tk.Label(master=mainframe, text="Label3").grid(column=3, row=1, sticky="S") 
tk.Button(master=mainframe, text="Open Targetslist", command=OpenTargetsButton).grid(column=1,row=3,sticky="W") 
tk.Button(master=mainframe, text="Save Output", command=WriteOutButton).grid(column=2,row=3,sticky="E") 
tk.Button(master=mainframe, text="Go", command=lambda: sequence(FilterList(file_path),\ 
                  GetIP_Mac(targethostlist),\ 
                  WriteOutput(Out_path))).\ 
                  grid(column=2, row=4, sticky="SE") 

#bind key to a command 
mainframe.bind('<Return>', lambda: sequence(FilterList(file_path),GetIP_Mac(targethostlist),WriteOutput(Out_path))) 
mainframe.mainloop() 

运行此显示:

enter image description here

正如你所看到的,标签是重叠......一切是不均匀和杂乱。

我现在的问题是,我不能将Pack()应用于L1L2L3或其他类似。

这样:L1.Pack(side="bottom")告诉我:“世界上没有属性‘包’”。当我试图消除grid(...)配置那里,给了我另一个错误:

_tkinter.TclError: cannot use geometry manager pack inside . which already has slaves managed by grid

所以..我究竟错在这里做什么?

编辑:正如在下面的答案和上一个错误中所说的,我不得不使用一个几何管理器。我在(只)窗口容器上单独使用了grid,所以效果很好。其实很简单。

+1

L1 = tk.Label(master = mainframe,text =“Label1”)。grid(column = 1,row = 1,sticky =“S”)应该分成两行...... –

回答

1

两件事。首先,包是小写的。我不知道这是否是一个错字,或者如果你在代码中有错误。

现在的主要事情:每个容器只有一种类型的几何管理器。

如果您将某物放入容器中,则直接进入该容器的所有其他物品也必须打包。

这并不是说,只有一种几何图形管理可以在你的整个的Tkinter程序中使用,只是每个集装箱。

容器可以是:顶层(窗口),帧,一LabelFrame,一个PanedWindow或笔记本。换句话说,您将其他小部件放入的任何小部件。

因此,如果您从主Tk实例,TopLevel开始,并且将小部件放入其中,则无论您使用哪种方法(网格/包/位置),都必须使用该容器直接包含的所有小部件。

但是,如果这些部件之一本身就是一个容器,说一个框架,你可以使用几何管理的不同的方法来安排内部的部件部件。

+0

好吧我现在看到它,有用,现在我知道有关容器哈哈。干杯! – DonD

1

你是在同一个窗口中使用gridpack。 Tkinter只能在一个窗口中处理一个几何管理器,因此决定是否需要gridpack

+0

“在一个窗口中“有点含糊。说你不能在同一父母或容器内使用两者更为正确。如果您在窗口内的不同框架中使用它们,您当然可以在整个窗口内使用它们。 –

+0

是的,这不是世界上最伟大的答案。 –