2013-02-17 87 views
0

我一直在試圖爲我定義的測試程序創建一個小的GUI。我的GUI需要看起來像這樣:在Tkinter GUI中排列小部件

Word: # label, then entry widget 
Definition: # label, entry widget 
Part of Speech: # label, then entry widget 
Go Quit # each are buttons 

這是我到目前爲止有:

from Tkinter import * 

class GetWord: 
    def __init__(self, master): 
     self.frame = Frame(master) 
     self.frame.pack() 
     self.wordL = Label(self.frame, text = 'Word: ') 
     self.wordL.pack(side = 'left') 
     self.wordE = Entry(self.frame) 
     self.wordE.pack(side = 'right', after=self.wordL) 
     self.defL = Label(self.frame, text = 'Definitions: ') 
     self.defL.pack(side = 'left', after=self.wordE) 
     self.defE = Entry(self.frame) 
     self.defE.pack(side = 'right', after=self.defL) 
     self.posL = Label(self.frame, text = 'Part of Speech: ') 
     self.posL.pack(side = 'left', after=self.defE) 
     self.posE = Entry(self.frame) 
     self.posE.pack(side = 'right', after=self.posL) 
     self.buttonE = Button(self.frame, text = 'Go', command = self.getInfo) 
     self.buttonE.pack(side='bottom', after=self.posE) 
     self.quitB = Button(self.frame, text = 'Quit', fg = 'red', command = self.frame.quit) 
     self.quitB.pack(side='bottom', after=self.buttonE) 
    def getInfo(self): 
     print self.wordE.get(), self.defE.get(), self.posE.get() 

root = Tk() 
f = GetWord(root) 
root.mainloop() 

然而,他們不用排隊。如何將它們分別作爲'行'關聯(一個標籤,每個'行'一個條目,以及兩個按鈕的最終'行')/

另外,我不確定這部分是如何工作的:

root = Tk() 
f = GetWord(root) 
root.mainloop() 

root不直接引用GetWord類,所以我不知道它是如何工作的。如果有人能向我解釋這個,那會很棒。謝謝!

回答

2

爲此,您必須用grid替代pack。使用grid時,必須先命名該小部件(例如)f = Label(#info)。然後,您設置grid,與包類似,但允許更多控制。 f.grid(row =1, column = 1, sticky = W)。要了解更多關於grid,請看這裏:http://effbot.org/tkinterbook/grid.htm

+0

謝謝!我還爲你添加了第二個答案。 – 2013-02-17 03:46:10

+0

@ F3AR3DLEGEND很高興能幫到你。除了包和網格之外,還有第三個選項,稱爲地點,但是我還沒有使用它,因爲a)我不需要它,並且b)網格完成了我想要的一切,組織起來 – erdekhayser 2013-02-17 03:51:34

1

至於第二部分,root確實訪問GetWord類。 root = Tk()將root設置爲Tkinter窗口。通過說f = GetWord(root),您將主窗口設置爲root,這意味着無論對f所做的任何操作都在名爲root的窗口中。然後,GetWord做它的__init__方法。 root.mainloop()指示窗口運行並等待主窗口中需要的任何更改(如識別按鈕推送或其他事件)。沒有這個,窗口就不會做任何事情。