繁体   English   中英

如何在函数Login()中获取'username'的值,以在另一个python程序上使用它?

[英]How can I get the value of 'username' inside the function Login() to use it on another python program?

from Tkinter import *

root = Tk()
root.geometry("230x100")

L1 = Label(root, text="Login page", bg = "blue", fg = "white")
L1.pack(fill = X, ipadx = 5, ipady = 5)

V = StringVar(root, value='Enter username here')
E1 = Entry(root, textvariable=V)
E1.pack(side = LEFT, padx = 5, pady = 5)

def Login():
    username = V.get()
    print "Username is '" + username + "'"

B1 = Button(root, text ="Login" , command = Login)
B1.pack(side = RIGHT, fill = X, pady=5)

mainloop()

我一直试图在函数Login()中获取'username'的值,以在另一个python程序上使用它。

我尝试将其设置为全局变量并更改其范围,但没有任何帮助。

我需要在函数Login()外使用'Username'的值。 请提供您的见解。

1)创建一个说“ global_vars.py ”的python文件,并在其中添加此行。

#global_vars.py
global_V = ''

2)导入该global_vars.py位置,如下所示:

#main.py

from Tkinter import *
import global_vars

root = Tk()
root.geometry("230x100")

L1 = Label(root, text="Login page", bg = "blue", fg = "white")
L1.pack(fill = X, ipadx = 5, ipady = 5)

V = StringVar(root, value='Enter username here')
#Set the global variable
global_vars.global_V = V
E1 = Entry(root, textvariable=V)
E1.pack(side = LEFT, padx = 5, pady = 5)

3)考虑您要在文件“ test.py ”中存在的python程序中使用此值。 只需导入global_vars.py并使用此变量

#test.py

import global_vars.py

def printUserName():
    print "Username is -", global_vars.global_V

考虑一下范围。 程序结束时,将释放所有内存(含义变量,对象等)。 我可以想到的将两种东西从一个程序传递到另一个程序的唯一两种方法是:

1)将用户名值写入一个文件,下一个程序在启动时可以读取该文件。

2)第三个运行上面程序的“控制器”或“启动程序”程序,从该程序获取返回值,然后将该值作为参数传递给下一个程序。

但是无论如何,您都必须保存该值,使其超出上述程序的范围。

如果必须使用python文件,则一个名为main.py的文件包含您的主程序(我假设它是一个GUI程序), 另一个包含登录程序的login.py文件。

main.py

from tkinter import Tk, Label
from login import LoginGUI

class mainGUI(Tk):
    def __init__(self):
        Tk.__init__(self)
        Label(self, text="You need to login first",
              bg="blue", fg="white").pack(fill="x", ipadx=5, ipady=5)
        # open login dialog
        login = LoginGUI(self)
        # wait for the user to log in
        self.wait_window(login)
        username = login.getLogin()
        Label(self,
              text="Your username is " + username).pack(fill="x", ipadx=5, ipady=5)
        self.mainloop()


if __name__ == '__main__':
    mainGUI()

login.py

从tkinter导入Toplevel,StringVar,Entry,Button,Label

from tkinter import Toplevel, StringVar, Entry, Button, Label

class LoginGUI(Toplevel):
    def __init__(self, master):
        Toplevel.__init__(self, master)
        self.transient(master)
        self.geometry("230x100")
        Label(self, text="Login page",
              bg="blue", fg="white").pack(fill="x", ipadx=5, ipady=5)
        self.username = ""
        self.usernameVar = StringVar(self, value='Enter username here')
        E1 = Entry(self,
                  textvariable=self.usernameVar)
        E1.pack(side="left", padx=5, pady=5)
        Button(self, text="Login",
               command=self.Login).pack(side="right", fill="x", pady=5)
        E1.focus_set()

    def Login(self):
        self.username = self.usernameVar.get()
        self.destroy()

    def getLogin(self):
        return self.username

如果您的主程序没有GUI,请在login.py中用Tk替换Toplevel ,并在__init__方法的末尾添加一个self.mainloop

您可以使用subprocess启动另一个程序,或者重构另一个程序,以便可以将用户名作为函数的参数传递,并将该程序作为主程序的模块导入。

暂无
暂无

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

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