Глобальная переменная между кадрами в wxPython
Я хотел использовать переменную, определенную в дочернем фрейме. Я не могу понять, как вернуть имя пользователя после успешного входа в систему в дочернем фрейме обратно в основной фрейм. Я хотел обновить статическую метку, чтобы показать имя пользователя.
import wx
import MySQLdb
import sys
username = ""
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, title = 'Application Title',style = wx.SYSTEM_MENU)
panel = wx.Panel(self)
menubar = wx.MenuBar()
panel.SetBackgroundColour((200,200,200))
vbox = wx.BoxSizer(wx.HORIZONTAL)
midPan = wx.Panel(panel)
midPan.SetBackgroundColour((100,0,0))
pan2 = wx.Panel(panel)
pan2.SetBackgroundColour((0,100,0))
vbox.Add(pan2, 1, wx.EXPAND | wx.ALL)
vbox.Add(midPan, 5, wx.EXPAND | wx.ALL)
hbox = wx.BoxSizer(wx.VERTICAL)
hbox1=wx.BoxSizer(wx.VERTICAL)
h1=wx.Panel(midPan)
h1.SetBackgroundColour((200,0,100))
h2=wx.Panel(midPan)
h2.SetBackgroundColour((0,100,200))
#######################################################################
text1 = wx.StaticText(h1, label="Welcome ") #insert the global variable in this label after the user has successfully logged in
text2 = wx.StaticText(h1, label="Label2")
hbox.Add(h1,3,wx.EXPAND|wx.ALL,20)
hbox.Add(h2,1,wx.EXPAND|wx.ALL,20)
hbox1.Add(text1,1,wx.ALIGN_LEFT)
hbox1.Add(text2,1,wx.ALIGN_RIGHT)
panel.SetSizer(vbox)
midPan.SetSizer(hbox)
h1.SetSizer(hbox1)
self.statusbar = self.CreateStatusBar()
self.SetMenuBar(menubar)
self.Centre()
self.Maximize()
self.Show(True)
frame = LoginFrame(self)
frame.Show(True)
frame.MakeModal(True)
def OnExit(self, e):
self.Close()
class LoginFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent,style=wx.DEFAULT_FRAME_STYLE & ~(wx.RESIZE_BORDER | wx.MAXIMIZE_BOX | wx.CLOSE_BOX | wx.MINIMIZE_BOX ), title = "System Login")
self.panel = wx.Panel(self)
self.userlabel = wx.StaticText(self.panel, label="Username:")
self.passlabel = wx.StaticText(self.panel, label="Password:")
self.userbox = wx.TextCtrl(self.panel, size=(140, -1))
self.passbox = wx.TextCtrl(self.panel, size=(140, -1), style=wx.TE_PASSWORD)
self.login = wx.Button(self.panel, label="Login")
self.exit = wx.Button(self.panel, label="Exit")
self.Centre()
self.windowSizer = wx.BoxSizer()
self.windowSizer.Add(self.panel, 1, wx.ALL | wx.EXPAND)
self.sizer = wx.GridBagSizer(5, 5)
self.sizer.Add(self.userlabel, (0, 0))
self.sizer.Add(self.userbox, (0, 1))
self.sizer.Add(self.passlabel, (1, 0))
self.sizer.Add(self.passbox, (1, 1))
self.sizer.Add(self.login, (2, 0))
self.sizer.Add(self.exit, (2, 1))
self.border = wx.BoxSizer()
self.border.Add(self.sizer, 1, wx.ALL | wx.EXPAND, 5)
self.panel.SetSizerAndFit(self.border)
self.SetSizerAndFit(self.windowSizer)
self.login.Bind(wx.EVT_BUTTON, self.OnLogin)
self.exit.Bind(wx.EVT_BUTTON, self.OnExit)
def OnLogin(self, e):
db = MySQLdb.connect("localhost","root","","test" )
cursor = db.cursor()
username = self.userbox.GetValue()
password = self.passbox.GetValue()
try:
cursor.execute("SELECT * FROM useraccounts WHERE username=%s" ,username)
data = cursor.fetchall()
for row in data:
dbpass = row[2]
if dbpass == password:
self.MakeModal(False)
e.Skip()
self.Close()
wx.MessageBox('You are now logged in', 'Info', wx.OK | wx.ICON_INFORMATION)
else:
wx.MessageBox('Username or Password is incorrect', 'Info', wx.OK | wx.ICON_INFORMATION)
except:
wx.MessageBox('Username or Password is incorrect', 'Info', wx.OK | wx.ICON_INFORMATION)
def OnExit(self,e):
self.MakeModal(False)
e.Skip()
self.Close()
sys.exit(0)
if __name__ == '__main__':
app = wx.App()
MainFrame()
app.MainLoop()