调用在其他2个函数中定义的变量

时间:2018-02-12 07:21:49

标签: python python-3.x tkinter

我需要帮助尝试调用两个不同函数的变量(我认为)。我是python的新手,但是我正在努力学习,刚刚开始,我坚持这一点,我已经在网上搜索过,无法找到任何内容。

def newAccount(): #New account window
    create = Tk()
    create.title("New Account")
    create.minsize(width=200, height=150)
    create.maxsize(width=400, height=300)

    L1 = Label(create, text= "New User:").grid(column= 1, row= 1)
    E1 = Entry(create, bd= 3)
    E1.grid(column= 1, row= 2)

    L2 = Label(create, text="Password:").grid(column=1, row=3)
    E2 = Entry(create, bd=3, show="*")
    E2.grid(column=1, row=5)

    L3 = Label(create, text="Comfirmation").grid(column=1, row=6)
    E3 = Entry(create, bd=3, show="*")
    E3.grid(column=1, row=7)

def createNew():
    User = E1.get()
    Pass = E2.get()

    if(Pass == E3.get()):
        Pass == Pass
        create.destroy()
    else:
        O1 = Message(create, text= "Passwords don't match.", fg= "red", width= 250).grid(column= 1, row= 10)

        E2.delete(0, END)
        E3.delete(0, END)

    return User, Pass

def quit():
    create.destroy()

B1 = Button(create, text="Create", command= createNew).grid(column= 1, row= 8)
create.close = Button(create, text="Quit", command= quit).grid(column=1, row=9)

def callback():
    User = [Username]
    Pass = [Password]

    if(User == User):
        if(Pass == Pass):
            print(".")

我正在尝试使用来自' def createNew()'的用户和密码。 并在&#;; def回调()'

中使用它

2 个答案:

答案 0 :(得分:0)

分享变量的最简单,最有效的解决方案'跨函数将使用面向对象的方法(OOP)进行编程。

  1. 有关OOP结账的更深入说明:  https://www.youtube.com/playlist?list=PL-osiE80TeTsqhIuOqKhwlXsIBIdSeYtc
  2. 有关使用OOP方法创建Tkinter应用程序的良好指南,请检查:  https://www.youtube.com/playlist?list=PLQVvvaa0QuDclKx-QpC9wntnURXVJqLyk
  3. 但简而言之,OOP使用类来创建对象。每个类都有属性(变量,与该对象相关的特征)和方法(用于“使用这些属性做事情的函数”)。

    OOP将在您的方案中提供的主要功能是INHERITANCE。继承允许具有类的函数共享变量,但它也允许类继承其他类的属性。

    查看您的代码我假设您正在尝试创建登录功能。使用您的示例获取E1的值使用下面的代码

    CODE:

    将您的帐户功能设为班级

    class Account(tk.Tk):
        def __init__(self):
            tk.Tk.__init__(self)
    
        'enter your code here e.g your labels and entry widgets'
    

    #在你的班级中声明E1时,你必须添加自己。

    self.E1 = Entry(self)
    self.E1.grid(blah blah)
    

    在另一个函数中获取入口值时传递参数self并使用self调用##。

    def createNew(self):
            User = self.E1.get()
    

    完整的小界面示例:

    from tkinter import *        
    
    class Create:
        def __init__(self, master):
    
            frame = Frame(master)
            frame.pack()
    
    
            userInput = Label(frame, text="Enter text to pass to another funtion:")
            userInput.grid(row=1, column=0, sticky="w")
    
            self.userEntry=Entry(frame)
            self.userEntry.grid(row=1, column=1, sticky="w")
    
            submit = Button(frame, text="submit", command=self.getVariable)
            submit.grid(row=3,columnspan=2)
    
    
    
        def getVariable(self):
            text = self.userEntry.get()
            print(text)
    
    root = Tk()
    app = Create(root)
    root.mainloop()   
    

    传递必须将变量声明为self.variableName的变量,然后将self作为参数传递给要调用该变量的函数,然后只引用它。

    我建议您观看我在顶部链接的Sentdex视频,他详细解释了这一点,并向您展示了如何实现它。

    祝你好运,玩得开心!

答案 1 :(得分:0)

您需要在任何函数之外声明变量。

variable_name = "" # Whatever

要在函数中使用它,只需将其作为参数传递。

function_name(variable_name)

从函数中更改变量,需要将其声明为" global"

def change_variable():

    global variable_name
    variable_name = "Hi"

喜欢这个

def change_variable():
    global var
    var = "Hello"

def process_variable(x):
    print(var)

var = ""               # declare the variable or list or whatever
change_variable()      # assign new values or amend existing ones
process_variable(var)  # use the variables values in another function