2012-10-05 25 views
0

我一直在谷歌上搜索這個問題,但沒有找到任何好的網站.... 我想創建按鈕和輸入小工具的樣子:Python的創建按鈕和Entry組件

[A] [ B] [C] [d] [E] [F]

[ENTRYWIDGET這裏] [OK]

我的代碼如下所示:

類控制器(幀):

def __init__(self,parent): 
    Frame.__init__(self, parent) 
    self.parent = parent 
    self.button1 = Button(parent, text = "A") 
    self.button1.pack(side = TOP) 
    self.button1 = Button(parent, text = "B") 
    self.button1.pack(side = TOP) 
    self.button1 = Button(parent, text = "C") 
    self.button1.pack(side = TOP) 
    self.button1 = Button(parent, text = "D") 
    self.button1.pack(side = TOP) 
    self.button1 = Button(parent, text = "E") 
    self.button1.pack(side = TOP) 
    self.button1 = Button(parent, text = "F") 
    self.button1.pack(side = TOP) 

    self.myentrybox = Entry(parent, width = 50) 
    self.myentrybox.pack(side = LEFT) 
    self.button = Button(parent, text = "OK") 
    self.button.pack(side = RIGHT) 

,這看起來與我試圖創造完全不同的..

任何反饋會如此感激感謝。

+0

您應將使用什麼庫放......我不認爲它WX ... –

+0

你需要使用[佈局或形狀管理]之一(http://infohost.nmt.edu/tcc/ help/pubs/tkinter/layout-mgt.html)並告訴它如何安排你的小部件。 – martineau

回答

2

您可以將您的按鈕放入另一個Frame


例子:

from Tkinter import * 
from ttk import * 

class Controller(Frame): 

    def __init__(self,parent): 
     Frame.__init__(self, parent) 

     buttons = Frame(parent) 
     buttons.pack(side=TOP) 
     for letter in 'ABCDEF': 
      Button(buttons, text=letter).pack(side=LEFT) 

     Entry(parent, width=50).pack(side=LEFT) 
     Button(parent, text='OK').pack(side=RIGHT) 

root = Tk() 
app = Controller(root) 
root.mainloop() 

結果:

Result

編輯回答您的意見

如果你想與for環路堅持創建按鈕,一個很好的方式應用事件處理程序是使用dict創造button < =>function to call的映射:

handler = {'A': function_A, 
       'B': function_FooBar, 
       'C': function_SomeThing} 

    for letter, func in ((k, handler[k]) for k in sorted(handler)): 
     Button(buttons, text=letter, command=func, width=10).pack(side=LEFT) 

通過這種方式,它很容易擴展。如果你不關心按鈕的順序,你可以只使用

for letter, func in handler.items(): 
+0

非常感謝您的回覆。在這種情況下,如何爲每個按鈕定義命令? – JuM

+0

@JuM這取決於。這些'Buttons'應該做些什麼?它們在某種程度上是相互關聯的,例如用另一個參數或類似的東西來調用某個方法?他們真的命名爲'A' ...'F'嗎? – sloth

+0

是的每個按鈕都會在點擊時調用不同的def函數。 – JuM

0

另外,還可以使用其他佈局管理器,如使用grid()方法,這有點更具表現力。

def __init__(self,parent=None): 
    Frame.__init__(self, parent) 
    self.grid() 
    # create buttons in row 1 
    for i, c in enumerate("ABCDEF"): 
     self.button = Button(parent, text=c) 
     self.button.grid(row=1, column=i+1) 
    # create textfield and 'ok' in row 2  
    self.myentrybox = Entry(parent, width = 50) 
    self.myentrybox.grid(row=2, column=1, columnspan=6) 
    self.button = Button(parent, text = "OK") 
    self.button.grid(row=2, column=7)