#Boa:Dialog:DBConnectDialog
import wx
##"""Given a set if login specs, create a dbServer instance and
## ensure that there is a valid, open connection to the database.
## If not, set the dbConnect to None.
## spec: dict(UserName=name, Password=pswd, ServerName=host)
## Allow names to be set with Default Holder. Consiter Dictionary
## or even a tuple? (name, pswd, host)"""
import sys
import wxdbtools as db
def create(parent, loginspec):
return DBConnectDialog(parent, loginspec)
[wxID_DBCONNECTDIALOG, wxID_DBCONNECTDIALOGCANCELBUTTON, wxID_DBCONNECTDIALOGCONNECTBUTTON,
wxID_DBCONNECTDIALOGOKBUTTON, wxID_DBCONNECTDIALOGPROMPTSTATICTEXT,
wxID_DBCONNECTDIALOGPWDTEXTCTRL, wxID_DBCONNECTDIALOGREMEMBERCHECKBOX,
wxID_DBCONNECTDIALOGSERVERNAMETEXTCTRL, wxID_DBCONNECTDIALOGSTATICTEXT1,
wxID_DBCONNECTDIALOGSTATICTEXT2, wxID_DBCONNECTDIALOGSTATICTEXT3,
wxID_DBCONNECTDIALOGSTATICTEXT4, wxID_DBCONNECTDIALOGSTATICTEXT6,
wxID_DBCONNECTDIALOGSTATUSTEXTCTRL, wxID_DBCONNECTDIALOGUSERNAMETEXTCTRL,
] = [wx.NewId() for _init_ctrls in range(15)]
class DBConnectDialog(wx.Dialog):
def _init_ctrls(self, prnt):
# generated method, don't edit
wx.Dialog.__init__(self, id=wxID_DBCONNECTDIALOG, name='DBConnectDialog', parent=prnt,
pos=wx.Point(44, 35), size=wx.Size(475, 373),
style=wx.STAY_ON_TOP | wx.DIALOG_MODAL | wx.TAB_TRAVERSAL | wx.SUNKEN_BORDER | wx.DEFAULT_DIALOG_STYLE,
title='Database Connection Dialog')
self.SetClientSize(wx.Size(467, 346))
self.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL, False,'MS Shell Dlg 2'))
self.SetThemeEnabled(True)
self.Bind(wx.EVT_CLOSE, self.OnDBConnectDialogClose)
self.Bind(wx.EVT_ACTIVATE, self.OnDBConnectDialogActivate)
self.staticText1 = wx.StaticText(id=wxID_DBCONNECTDIALOGSTATICTEXT1, label='User Name',
name='staticText1', parent=self, pos=wx.Point(16, 40), size=wx.Size(63, 16),
style=0)
self.staticText1.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL, False,
'MS Shell Dlg 2'))
self.staticText2 = wx.StaticText(id=wxID_DBCONNECTDIALOGSTATICTEXT2, label='Password',
name='staticText2', parent=self, pos=wx.Point(16, 88), size=wx.Size(55, 16),
style=0)
self.usernameTextCtrl = wx.TextCtrl(id=wxID_DBCONNECTDIALOGUSERNAMETEXTCTRL,
name='usernameTextCtrl', parent=self, pos=wx.Point(16, 56), size=wx.Size(208, 24),
style=0, value='')
self.servernameTextCtrl = wx.TextCtrl(id=wxID_DBCONNECTDIALOGSERVERNAMETEXTCTRL,
name='servernameTextCtrl', parent=self, pos=wx.Point(240, 56), size=wx.Size(208,
24), style=0, value='')
self.staticText3 = wx.StaticText(id=wxID_DBCONNECTDIALOGSTATICTEXT3,
label='Server Name or IP Address', name='staticText3', parent=self,
pos=wx.Point(240, 40), size=wx.Size(156, 16), style=0)
self.pwdTextCtrl = wx.TextCtrl(id=wxID_DBCONNECTDIALOGPWDTEXTCTRL, name='pwdTextCtrl',
parent=self, pos=wx.Point(16, 104), size=wx.Size(168, 24), style=wx.TE_PASSWORD,
value='')
self.rememberCheckBox = wx.CheckBox(id=wxID_DBCONNECTDIALOGREMEMBERCHECKBOX,
label='Remember Password', name='rememberCheckBox', parent=self, pos=wx.Point(16,
136), size=wx.Size(160, 16), style=0)
self.rememberCheckBox.SetValue(True)
self.staticText4 = wx.StaticText(id=wxID_DBCONNECTDIALOGSTATICTEXT4,
label='Connection Status Log', name='staticText4', parent=self, pos=wx.Point(168,
160), size=wx.Size(127, 16), style=0)
self.connectButton = wx.Button(id=wxID_DBCONNECTDIALOGCONNECTBUTTON, label='Connect',
name='connectButton', parent=self, pos=wx.Point(200, 104), size=wx.Size(74, 26),
style=0)
self.connectButton.Bind(wx.EVT_BUTTON, self.OnConnectButton,
id=wxID_DBCONNECTDIALOGCONNECTBUTTON)
self.cancelButton = wx.Button(id=wxID_DBCONNECTDIALOGCANCELBUTTON, label='Cancel',
name='cancelButton', parent=self, pos=wx.Point(376, 104), size=wx.Size(74, 26),
style=0)
self.cancelButton.Bind(wx.EVT_BUTTON, self.OnCancelButton,
id=wxID_DBCONNECTDIALOGCANCELBUTTON)
self.statusTextCtrl = wx.TextCtrl(id=wxID_DBCONNECTDIALOGSTATUSTEXTCTRL,
name='statusTextCtrl', parent=self, pos=wx.Point(16, 176), size=wx.Size(432, 160),
style=wx.TE_READONLY | wx.TE_MULTILINE, value='')
self.statusTextCtrl.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.NORMAL, False,
'MS Shell Dlg 2'))
self.staticText6 = wx.StaticText(id=wxID_DBCONNECTDIALOGSTATICTEXT6, label='(NOT SECURE)',
name='staticText6', parent=self, pos=wx.Point(16, 152), size=wx.Size(85, 16),
style=0)
self.OkButton = wx.Button(id=wxID_DBCONNECTDIALOGOKBUTTON, label='OK', name='OkButton',
parent=self, pos=wx.Point(288, 104), size=wx.Size(75, 26), style=0)
self.OkButton.Bind(wx.EVT_BUTTON, self.OnOkButton, id=wxID_DBCONNECTDIALOGOKBUTTON)
self.promptStaticText = wx.StaticText(id=wxID_DBCONNECTDIALOGPROMPTSTATICTEXT,
label='Change your database login:', name='promptStaticText', parent=self,
pos=wx.Point(16, 8), size=wx.Size(242, 23), style=0)
self.promptStaticText.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.NORMAL, False,
'MS Shell Dlg 2'))
def __init__(self, parent, defaultHolder):
self._init_ctrls(parent)
self.EntryDict = {'UserName':self.usernameTextCtrl,
'Password':self.pwdTextCtrl,
'ServerName':self.servernameTextCtrl}
self.dbServer = db.DBServer(self) # the sever always has a disply.
self.dbConnect = None
self.defaultHolder = defaultHolder
self.SetWidgetData()
def InitLogin(self):
user, password, host = self.GetWidgetData()
self.dbConnect = self.dbServer.Login(host, user, password)
def GetDBServer(self): # Creator calls here to get the server (may not have a connection)
return self.dbServer
def IsConnected(self): # Creator calls here to get the status of the connection
return self.dbServer.IsOpen(self.dbConnect)
def SetWidgetData(self):
for var in self.defaultHolder.GetVariables():
try:
self.EntryDict[var['name']].SetValue(var['value'])
except KeyError:
pass
def SetPromptText(self, text):
self.promptStaticText.SetLabel(text)
def GetWidgetData(self):
user = self.usernameTextCtrl.GetValue()
password = self.pwdTextCtrl.GetValue()
host = self.servernameTextCtrl.GetValue()
return user, password, host
def write(self, message):
"""Requires a newline at the end of the string."""
self.statusTextCtrl.AppendText(message)
def ConnectToDB(self, user, password, host, database=""):
"""The dbConnect retains the state returned by the server login()"""
self.dbConnect = self.dbServer.Login(host, user, password)
if self.dbConnect:
if database:
self.dbServer.Execute("CREATE DATABASE IF NOT EXISTS %s" % database)
self.dbServer.Execute("USE %s" % database)
self.OkButton.Enable()
self.OkButton.SetDefault()
return True
else:
wx.Bell()
self.OkButton.Disable()
self.usernameTextCtrl.SetSelection(-1, -1)
self.usernameTextCtrl.SetFocus()
def OnConnectButton(self, event):
if self.dbServer.IsOpen(self.dbConnect):
self.dbConnect.close()
user, password, host = self.GetWidgetData()
if self.ConnectToDB(user, password, host):
self.defaultHolder.SetVariables(UserName=user, Password=password,
ServerName=host)
self.defaultHolder.UpdateConfig()
def OnCancelButton(self, event):
self.EndModal(wx.ID_CANCEL)
def OnOkButton(self, event):
self.EndModal(wx.ID_OK)
def OnDBConnectDialogClose(self, event):
self.EndModal(wx.ID_CLOSE)
def OnDBConnectDialogActivate(self, event):
"""Set the look to be just right on opening."""
if event.GetActive():
self.OkButton.Disable()
self.connectButton.SetDefault()
pos = self.statusTextCtrl.GetLastPosition()
# self.statusTextCtrl.SetInsertionPoint(pos)
self.statusTextCtrl.ShowPosition(pos)
self.usernameTextCtrl.SetSelection(-1, -1)
self.usernameTextCtrl.SetFocus()
event.Skip()
if __name__ == "__main__":
import DefaultHolder as DH
app = wx.PySimpleApp()
answer = wx.ID_OK
dbDefaultHolder = DH.DefaultValueHolder("HETAP Pro 2.00", "Setup")
dbDefaultHolder.SetVariables(UserName="barton", Password="1coolSQL",
ServerName="genesis")
dbDefaultHolder.InitFromConfig()
frame = create(None, dbDefaultHolder)
## frame.ShowModal()
while answer == wx.ID_OK:
frame.ShowModal()
answer = wx.MessageBox("Do it again? ", "go again?", wx.OK| wx.CANCEL |wx.ICON_QUESTION, frame)
print answer, wx.ID_CANCEL
## if answer == wx.ID_CANCEL:
## break
frame.Destroy()
app.MainLoop()
From: https://bytes.com/topic/python/insights/613576-simple-wx-dialog-subclass-database-login
3360

被折叠的 条评论
为什么被折叠?



