2011-03-23 102 views
0
class user_management(wx.Panel): 
    def login(self):   
     # Login Function can be later integrated to allow users access to your program 
     username = self.txt_Username.GetValue() 
     self.frame.SetStatusText("Welcome "+username+" to the system!!") 
     test = MyApp(0) 
     test.MainLoop() 

如何访问在另一个类中的变量名:访问变量类下的蟒蛇

class wizard(wx.wizard.Wizard): 
    def on_finished(self, evt): 
     totalscore = self.totalscore 
     print "Final score: %s" % (totalscore) 
     user = "c1021358" 
     db_file="data/data.db" 
     database_already_exists = os.path.exists(db_file)  
     con = sqlite3.connect(db_file) 
     cur = con.cursor() 
     sql = "INSERT INTO scores (username,totalscore,topic) VALUES ('%s','%s','%s')" % (user,totalscore,tag) 

目前的用户是静态的,但我想使这个用户变量等于从文本框中获取的用户名。

任何人都可以告诉我怎么做到这一点吗?

谢谢

回答

1

那么,你需要将username的值存储在两个方法都可以看到的地方。做到这一点的最简单方法,但几乎肯定不是正确的方法是将其变为全局变量。你可以这样做,使用global关键字:

global username 
username = ... 

但是,你几乎肯定是更有可能希望将其存储一些对象的属性。我不知道你的架构,所以我不能告诉你哪里最好放置它,但是像UserSettings对象就好。

+0

@Jeff 请您详细说明如何创建对象。我会尝试使用全局变量 - 但老实说,我已经尝试过。这里是代码,我知道它的代码非常糟糕,非常混乱 - 但请尽量阅读它。 谢谢 – viperfx 2011-03-23 23:07:56

+0

得到它的工作,谢谢! – viperfx 2011-03-23 23:27:24

4

目前username是一个局部变量,不能在方法的外部访问。您可以通过执行诸如self.username之类的操作使其成为变量成员。在__init__方法中初始化它可能是一个好主意。

编辑:katrielalex有正确的想法。您可能希望将用户名存储在不属于您的user_management面板一部分的内容中。这可能是一个全局变量,或者你可以创建一个用户类。

class User: 
    def __init__(self, username): 
     self.username = username 
# Create a global "current_user", with an initial username of None 
current_user = User(None) 

然后,如果你可以从全球用户对象访问的用户名:

def login(self): 
    global current_user 
    current_user.username = self.txt_Username.GetValue() 

请注意,这是大家很一般(例如,这是假定你只能支持一个用户在同一时间) ,但它应该能够让你开始。