[英]Python Need Access to variable created in a function from another function
由于我已将第一个功能的搜索词设置为全局-第二个功能不应该能够访问它-如果没有,我将如何使其工作?
import sys
import os.path
from tkinter import *
import math
def setupsearch():
exist = os.path.isfile('messages.txt')
if exist == True:
global searchterm
gui2 = Toplevel(master=gui)
Label(gui2, text = "Search Term").grid(row = 0)
searchterm = Entry(gui2).grid(row = 1)
Button(gui2, text="Search", command = search).grid(row = 2)
else:
labelprint = "No Stored Messages"
add = Label(gui, text = labelprint, width = 30)
add.grid(row = 2, column =2)
def search():
searchterm =
with open('messages.txt', 'r') as inF:
i = 1
for line in inF:
if searchterm in line:
print("found it in line " + str(i))
i = i + 1
else:
print("Not in line " + str(i))
i = i + 1
gui = Tk()
Button(gui, text="Retriever", command=setupsearch).grid(row = 5, column = 0)
mainloop( )
每个要更改searchterm
全局变量值的函数都需要声明global searchterm
。 global
语句不会更改变量本身的属性,而是会更改函数的属性,特别是当前函数设置和获取有关变量名的值的方式。
您可以不用从函数内部访问全局变量而无需声明它为全局变量,只要(a)没有同名的局部变量与其冲突,并且(b)无需更改其全局变量值。
如果你不说, global searchterm
,但然后分配东西searchterm
,该功能将简单地创建一个同名的局部变量。
在您的setupsearch
使用
Button(gui2,
text="Search",
command = lambda: search(thesearchterm)).grid(row = 2)
当然可以修改search
的定义
def search(searchterm):
...
请注意,我使用lambda: search(the_searchterm)
是有充分理由的,因为searchterm = Entry(...)
是一个小部件。 请阅读有关Tkinter.Entry
的教程,或者简单地在shell提示符下使用man Entry
(当然,您必须已经为tk安装了文档)。
您想通过声明以下内容来开始您的第二个功能:
def search():
global searchterm
## rest of function goes here
然后,您将可以在search()
访问全局变量
话虽如此……我敢肯定,总的来说,拥有全局变量是一个坏主意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.