0

Python に比較的初心者で、まだすべてのインとアウトを学習していますが、学習中です。私が取り組んでいる個人的なプロジェクトのために、初めて GUI に飛び込んでいます。(私は言語学の大学院生であり、これにより研究能力が大幅に向上します。) Tkinter と Button クラスについて (基本的に、それらが存在することは) 知っていますが、始めるには助けが必要です。魔法の言葉を知ったら、必要な状況に適応できると思います。

基本的に、約 180 語のサンプル テキストの抜粋があります。私が探しているのは、180 単語の抜粋の個々の単語が個別のボタンとして表示され、ユーザーが動詞をクリックするなどのプロンプトが表示されるように、GUI インターフェイスを作成する方法を見つけることです。クリックされた値が保存され、次の質問に進みます。

知っておくべきこと: テキストに応じてボタンを作成する方法。(ボタンごとに異なる変数名が必要になると思います。) - ある抜粋の長さが別の抜粋と異なっていても問題になりますか? (私はそうではないと思います。) -抜粋内に同じ単語がいくつかある場合、それは問題になりますか? (クリックされた単語が元の抜粋のどこにあるかを覚えておくためにインデックスを使用できるので、そうではないと思います。)クリックされたボタンに応じてデータを保存する方法。スレートをきれいにして、次の質問に進む方法。

よろしくお願いします。

4

1 に答える 1

2

これは小さな例とデモです。プログラムを開始するために必要なものがすべて含まれています。コード内のコメントを参照してください。

ここに画像の説明を入力

import tkinter

app = tkinter.Tk()

# Create a set for all clicked buttons (set prevents duplication)
clicked = set()
# Create a tuple of words (your 180 verb goes here)
words = 'hello', 'world', 'foo', 'bar', 'baz', 'egg', 'spam', 'ham'

# Button creator function
def create_buttons( words ):
    # Create a button for each word
    for word in words:
        # Add text and functionality to button and we are using a lambda
        # anonymous function here, but you can create a normal 'def' function
        # and pass it as 'command' argument
        button = tkinter.Button( app,
                                 text=word,
                                 command=lambda w=word: clicked.add(w) )
        # If you have 180 buttons, you should consider using the grid()
        # layout instead of pack() but for simplicity I used this one for demo
        button.pack()

# For demo purpose I binded the space bar, when ever
# you hit it, the app will print you out the 'clicked' set
app.bind('<space>', lambda e: print( *clicked ))

# This call creates the buttons
create_buttons( words )

# Now we enter to event loop -> the program is running
app.mainloop()

編集:

ラムダ式のないコードは次のとおりです。

import tkinter

app = tkinter.Tk()

# Create a set for all clicked buttons (set prevents duplication)
clicked = set()
# Create a tuple of words (your 180 verb goes here)
words = 'hello', 'world', 'foo', 'bar', 'baz', 'egg', 'spam', 'ham'

# This function will run when pressing the space bar
def on_spacebar_press( event ):
    print( 'Clicked words:', *clicked )

# Button creator function
def create_buttons( words ):
    # Create a button for each word
    for word in words:
        # This function will run when a button is clicked
        def on_button_click(word=word):
            clicked.add( word )
        # Add button
        button = tkinter.Button( app,
                                 text=word,
                                 command=on_button_click )
        # If you have 180 buttons, you should consider using the grid()
        # layout instead of pack() but for simplicity I used this one for demo
        button.pack()

# Binding function tp space bar event
app.bind('<space>', on_spacebar_press)

# This call creates the buttons
create_buttons( words )

# Now we enter to event loop -> the program is running
app.mainloop()
于 2013-11-09T22:33:22.627 に答える