用于数据库登录的简单wx.Dialog子类

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值