簡體   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