0

Python的相对菜鸟,仍在学习所有细节,但我正在学习。我第一次为我正在从事的个人项目深入研究 GUI。(我是一名语言学研究生,这将大大提高我的研究能力。)我知道 Tkinter 和 Button 类(基本上,它们存在),但我需要一些帮助才能开始。我想一旦我知道了神奇的词,我就可以根据我需要的情况来调整它。

基本上,我有大约 180 个单词的示例文本摘录。我要做的是找出一种方法来创建一个 GUI 界面,以便 180 个单词的摘录中的每个单词都显示为一个单独的按钮,并提示用户,例如,单击动词。单击的值被存储,然后我继续我的下一个问题。

我需要知道的:如何根据文本创建按钮。(我假设每个按钮都需要一个不同的变量名。) - 如果一个摘录的长度与另一个不同,这有关系吗?(我假设不是。) - 摘录中有几个相同的词有关系吗?(我假设不是,因为您可以使用索引来记住单击的单词在原始摘录中的位置。)如何根据单击的按钮获取存储的数据。如何清理石板并继续我的下一个问题。

在此先感谢您的帮助。

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

编辑:

这是没有lambda 表达式的代码:

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 回答