2015-04-12 67 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

是的,這不是世界上最偉大的答案。 –