【问题标题】:I can't understand some find_text function in Tkinter我无法理解 Tkinter 中的一些 find_text 函数
【发布时间】:2018-07-26 03:52:28
【问题描述】:

我开始阅读关于 Tkinter 的书

(Tkinter GUI 应用程序开发蓝图)

当我开始借助这本书制作我的文本编辑器时,我并没有真正理解其中的一部分。

有一个功能可以帮助您在文本中找到单词。

def find_text(event=None):
search_toplevel = Toplevel(root)
search_toplevel.title('Find Text')
search_toplevel.transient(root)
search_toplevel.resizable(False, False)
Label(search_toplevel, text="Find All:").grid(row=0, column=0, sticky='e')
search_entry_widget = Entry(
    search_toplevel, width=25)
search_entry_widget.grid(row=0, column=1, padx=2, pady=2, sticky='we')
search_entry_widget.focus_set()
ignore_case_value = IntVar()
Checkbutton(search_toplevel, text='Ignore Case', variable=ignore_case_value).grid(
    row=1, column=1, sticky='e', padx=2, pady=2)
Button(search_toplevel, text="Find All", underline=0,
       command=lambda: search_output(
           search_entry_widget.get(), ignore_case_value.get(),
           content_text, search_toplevel, search_entry_widget)
       ).grid(row=0, column=2, sticky='e' + 'w', padx=2, pady=2)

我们创建按钮的行对我来说真的很难。我发现 lambda-function 就像普通函数一样,但以其他方式创建,但其他东西真的很难。你能解释一下这段代码实际上是做什么的吗? (按钮代码)

完整代码:

https://github.com/PacktPublishing/Tkinter-GUI-Application-Development-Blueprints-Second-Edition/blob/master/Chapter%2002/2.05.py

【问题讨论】:

  • 但我真的很想了解 lambda 中的代码 :(
  • lambda 是一个匿名函数,这意味着它没有您可以调用的名称。 lambda 正在执行另一个名为search_output() 的函数。 search_output() 函数接受 5 个位置参数,而 Lambada 传递 5 个参数。根据提交给search_output() 函数的参数,它将使用标签选项突出显示所有匹配项。也就是说,Stack Overflow 并不是要教您代码在做什么,而是要帮助您了解自己尝试代码时遇到的错误。
  • 从 github 链接判断我和你的困惑我认为你应该做一个较小的项目。我也可以说 github 代码不会工作,因为它缺少几个导入。不过,您可以使用from tkinter import * 为 github 代码修复此问题。尝试一些 youtube 教程而不是书籍。 youtube 教程的视觉效果更好,并且很好地解释了基础知识。

标签: python tkinter


【解决方案1】:

也许它会帮助你看到它作为一个正常的功能写出来。这段代码也可以工作:

def find_clicked():
    search_output(
        search_entry_widget.get(), ignore_case_value.get(),
        content_text, search_toplevel, search_entry_widget)

Button(search_toplevel, text="Find All", underline=0,
       command=find_clicked).grid(row=0, column=2, sticky='e' + 'w', padx=2, pady=2)

lambda 唯一的好处是通过将东西塞进一行来迷惑人们。我建议您尽可能避免使用 lambda。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-28
    • 2018-10-25
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多