0

私はこの問題についてグーグルで調べていて、良いウェブサイトを見つけることができませんでした....ボタンとエントリウィジェットを作成したいのは次のようになります:

[A] [B] [C] [D] [E] [F]

[エントリウィジェットはこちら] [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 )

そして、これは私が作成しようとしているものとは完全に異なって見えます..

フィードバックをお寄せいただきありがとうございます。

4

2 に答える 2

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()

結果:

結果

コメントに答えるために編集する

ボタンを作成するためにループを使い続けたい場合for、イベントハンドラーを適用する良い方法は、 :を使用してbutton<=>のマッピングを作成することです。function to calldict

    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():
于 2012-10-05T07:01:54.797 に答える
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)
于 2012-10-05T08:13:58.717 に答える