【问题标题】:How to bind Return key for "exit" text to close tkinter (Python) gui window?如何绑定“退出”文本的返回键以关闭 tkinter (Python) gui 窗口?
【发布时间】:2020-12-06 00:51:55
【问题描述】:

使用下面的 Python 代码,我想

  1. 输入“退出”
  2. 按键盘上的“回车”键
  3. 关闭 tkinter 窗口

但是在输入“exit”并从键盘上按“Enter”键后,“tk 窗口”并没有关闭。

代码是:

import tkinter as tk

window = tk.Tk()

greeting = tk.Label(text = "Test Tk window Frame")
user_input = tk.Text()

user_input.pack()
greeting.pack()

   
def chat(event=None):
    inputmsg = user_input.get(tk.END)
    if inputmsg is None or inputmsg == "": 
        return None

    if inputmsg.lower() == "exit"
        inputmsg.bind('<Return>', lambda e: window.destroy()) # NOT Working
        #window.destroy() # Not Working
        return None

user_input.bind("<Return>", chat) # NOT Working out

window.mainloop()

我的意图是只绑定返回键而不是按钮。 由于我是使用 tkinter 的 Python 新手,任何人都可以分享任何想法/参考吗?

谢谢。

【问题讨论】:

  • 嗨,欢迎来到 SO!尝试在分配inputmsg 之后放置print('input you typed:', inputmsg)。这是否有助于更好地识别您的问题?
  • 你已经给出了线索​​。当我将 print('input you typed:', inputmsg) 放在 inputmsg 的分配之后,我什么也没得到。所以,我在哪里做错了......仍然想知道。多一点线索会有很大帮助。

标签: python-3.x tkinter


【解决方案1】:

问题的根源是条目文本的获取不正确。所以inputmsg 在你输入之后永远不会是exit。你应该使用:

user_input.get(1.0, "end-1c")

阅读 this answer 及其 cmets 了解有关这些参数的更多详细信息

更新:如果只需要最后一行,您可以通过两种方式设置参数:

user_input.get("end-5c", "end-1c") #extract 4 symbols before the last (which is '\n')
user_input.get("end-1c linestart", "end-1c lineend") #extract the last line from start to end

【讨论】:

  • 是的,我知道 inputmsg 永远不会退出。但是当我尝试这个时,tkinter 窗口没有关闭。当然它仍然没有得到“退出”字的最后一行。如何从整个聊天文本中获取最后一个字符串“exit”?
  • 如果您使用退格键在聊天中只留下“退出”一词,它实际上会这样做。
  • 我想你可以在这里对自己做更多的事情。如果1.0end-1c 的含义对您来说很清楚,只需使用试错法并将1.0 替换为end-2cend-3c 等,看看inputmsg 的值如何变化。等我的更新很快。
  • 感谢@mathfux 提供的线索。我已经解决了。
猜你喜欢
  • 2018-06-05
  • 2014-04-07
  • 2013-06-06
  • 2015-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-16
相关资源
最近更新 更多