繁体   English   中英

如果我在一个 function 中创建了小部件,我如何使用 PythonE460F8BEA5A9F5118 在另一个 function 中访问它们

[英]If I created widgets in one function, how can I access them in another function using Python Tkinter?

这是我第一个使用 Tkinter 的项目,所以如果问题很容易解决,请原谅。 根据用户从下拉列表中选择的选项,我调用 function 来创建某些小部件(例如条目)并将其放置在框架上。 然后,当按下另一个按钮时,我想访问此条目中的文本。 但是,这似乎给了我错误(说小部件未定义),因为我想访问我在调用 function 时创建的小部件。

我看到的一个明显的解决方案是创建我想在 function 之外使用的所有可能的小部件,并且仅在调用 function 时放置它们。 这似乎很草率,并产生了更多问题。 还有其他修复吗?

提前致谢!

这是 function,我在其中创建小部件并将其放置在框架上。

def loadBook():
    print("book is loaded")
    #Authors
    labelAuth1 = tk.Label(frame, text="Author 1 Name:")
    entryAuth1 = tk.Entry(frame)

    labelAuth1.place(relwidth=0.23, relheight=0.08, rely=0.1)
    entryAuth1.place(relheight=0.08, relwidth=0.18, relx=0.3, rely=0.1)

这是 function 的片段,它使用我在上面创建的条目小部件的输入:

def isBook():
    if len(entryAuthSur1.get())==0:
        pass
    else:
        bookString = ""
        bookString += entryAuthSur1.get()

当第二个 function 执行时,我收到一个运行时错误,即entryAuthSur1未定义。

函数内部的所有变量都是局部的。 这意味着它在 function 调用结束后被删除。 由于您的变量( entryAuth1 )不是全局变量,因此它仅存在于 function 中,并且在loadBook function 结束时被删除。 这是工作代码:

import tkinter as tk

# Making a window for the widgets
root = tk.Tk()


def loadBook():
    global entryAuth1 # make the entry global so all functions can access it
    print("book is loaded")
    #Authors
    labelAuth1 = tk.Label(root, text="Author 1 Name:")
    entryAuth1 = tk.Entry(root)
    # I will check if the user presses the enter key to run the second function
    entryAuth1.bind("<Return>", lambda e: isBook())

    labelAuth1.pack()
    entryAuth1.pack()

def isBook():
    global entryAuth1 # make the entry global so all functions can access it

    # Here you had `entryAuthSur1` but I guess it is the same as `entryAuth1`
    if len(entryAuth1.get())==0:
        pass
    else:
        bookString = ""
        bookString += entryAuth1.get()
        print(bookString) # I am going to print the result to the screen


# Call the first function
loadBook()

root.mainloop()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM