[英]If I created widgets in one function, how can I access them in another function using Python Tkinter?
this is my first project using Tkinter so please excuse me if the question is very simple to solve.这是我第一个使用 Tkinter 的项目,所以如果问题很容易解决,请原谅。 Depending on what option the user chooses from a dropdown, I call a function that creates and places certain widgets (eg an entry) on a frame.
根据用户从下拉列表中选择的选项,我调用 function 来创建某些小部件(例如条目)并将其放置在框架上。 Then, when another button is pushed I want to access the text inside this entry.
然后,当按下另一个按钮时,我想访问此条目中的文本。 However, this seems to be giving me errors (saying that the widget is undefined) because I want to access a widget which I create when a function is called.
但是,这似乎给了我错误(说小部件未定义),因为我想访问我在调用 function 时创建的小部件。
An obvious solution I see is to create all possible widgets I want to use outside the function, and only place them when the function is called.我看到的一个明显的解决方案是创建我想在 function 之外使用的所有可能的小部件,并且仅在调用 function 时放置它们。 This seems quite sloppy and creates many more issues.
这似乎很草率,并产生了更多问题。 Is there another fix?
还有其他修复吗?
Thanks in advance!提前致谢!
This is the function where I create and place the widgets on the frame.这是 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)
This is a snippet of a function which uses input from the entry widget I created above:这是 function 的片段,它使用我在上面创建的条目小部件的输入:
def isBook():
if len(entryAuthSur1.get())==0:
pass
else:
bookString = ""
bookString += entryAuthSur1.get()
When the second function executes, I get a runtime error that entryAuthSur1
is not defined.当第二个 function 执行时,我收到一个运行时错误,即
entryAuthSur1
未定义。
All variables inside functions are local.函数内部的所有变量都是局部的。 That means that it is deleted after the function call ends.
这意味着它在 function 调用结束后被删除。 As your variable (
entryAuth1
) wasn't global so it only existed inside the function and was deleted when the loadBook
function ended.由于您的变量(
entryAuth1
)不是全局变量,因此它仅存在于 function 中,并且在loadBook
function 结束时被删除。 This is the working code:这是工作代码:
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.