【问题标题】:Im writing my first Gui game and am running into some widget issues我正在编写我的第一个 Gui 游戏并且遇到了一些小部件问题
【发布时间】:2020-05-06 10:48:30
【问题描述】:

我正在编写一个文本游戏,您必须在 60 秒内输入尽可能多的随机生成的(从文件中)单词。我目前有一个工作计时器,但我的条目小部件不会做任何事情。 我应该能够在我的条目小部件上按 Enter,如果其中的单词等于生成的单词,则分数会上升。该框也应该被清除,但它也不会这样做。

def game(*args):
    if timer == 60: # Starts the timer and calls the words function
        countdown()
    words()


def words():
    global score
    global timer

    if timer > 0:
        entry.focus_set()  # Activate the entry box
        word = str(random.choice(word_list[0]))
        word_label.config(text=word)
        if entry.get().lower() == word.lower():
            score += 1
            entry.delete(0, 9999999)
    if timer == 0:
        results(score)


def countdown():
    global timer

    if timer > 0:
        timer -= 1
        # Update the time left label
        time_label.config(text="Time left: " + str(timer))

        # Run the function again after 1 second
        time_label.after(1000, countdown)

这些是涉及的主要功能。

# Gui
root = Tk()
root.title("Text Typers")

# Create the top frame
top_frame = ttk.LabelFrame(root, text="Menu:")
top_frame.grid(row=0, column=0, padx=10, pady=10, sticky="NSEW")

# Play button
play_button = ttk.Button(top_frame, text="Play", command=game)
play_button.grid(row=5, column=0, columnspan=2, padx=10, pady=10)

# Timer
time_label = ttk.Label(top_frame, text="Time left: " + str(timer))
time_label.grid(row=6, column=0, columnspan=2, padx=10, pady=10)

# Entry function
entry = ttk.Entry(root)
entry.grid(row=8, column=0)


# Word label
word_label = ttk.Label(root, font=20)
word_label.grid(row=7, column=0, padx=10, pady=10)

root.mainloop()

这是所有相关的 GUI 代码。有什么事在我头上吗? 编辑:经过更多测试后,似乎代码甚至没有运行到“if entry”部分,是因为定时器函数正在运行并阻止单词函数正常运行吗?

【问题讨论】:

  • 你有缩进错误,从if timer ...开始
  • 这里复制一个是错误的,代码本身没有任何缩进错误
  • Edit 你的问题并解决它! 按回车键:阅读Events and Bindings - <Return>

标签: python tkinter tkinter-entry


【解决方案1】:

如果你想在按下回车时检查单词,你可能想添加一个按键监听事件,我会这样做:

def key_press(event):
     #here you would put your function for checking the word
     print "key_press", repr(event.char)

然后,在您的根目录上:

frame = tkinter.Frame(root)
frame.bind("<KeyRelease-enter>", key_press)
frame.pack

【讨论】:

  • 事件参数有什么作用? Keysm也给我带来了麻烦,我在python 3上。
猜你喜欢
  • 2019-03-01
  • 2021-11-12
  • 2022-11-23
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多