Python论坛  - 讨论区

标题:[python-chinese] 谁能给个登陆框的WXPYTHON例子?谢

2005年11月07日 星期一 16:40

mydooom mydooom at gmail.com
Mon Nov 7 16:40:47 HKT 2005

谢谢,如:
用户名: 输入框
密码: 输入框
 登陆 取消
  我用box布局一直没有搞定。。谢谢各位了。
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20051107/5fe2843f/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年11月07日 星期一 16:48

Qiangning Hong hongqn at gmail.com
Mon Nov 7 16:48:59 HKT 2005

mydooom wrote:
> 谢谢,如:
> 用户名:   输入框
> 密码:     输入框
>    登陆   取消
>  
>  
> 我用box布局一直没有搞定。。谢谢各位了。

哈哈,正好手头有一个登录对话框的代码,不过是用FlexGridSizer的。


# --*-- encoding: UTF-8 --*--

import wx

class LoginDialog(wx.Dialog):
    def __init__(self, parent, id=-1):
        wx.Dialog.__init__(self, parent, id, u'用户登录')
        self.ctrl_username = wx.TextCtrl(self, -1)
        self.ctrl_passwd = wx.TextCtrl(self, -1,
                style=wx.TE_PASSWORD)
        self.ctrl_login = wx.Button(self, -1, u'登录')
        self.ctrl_login.SetDefault()
        self.ctrl_cancel = wx.Button(self, wx.ID_CANCEL, u'取消')
#        self.ctrl_register = wx.Button(self, -1, u'注册')

        self._layout()

    def _layout(self):
        sizer = wx.BoxSizer(wx.VERTICAL)

        b = wx.StaticBoxSizer(wx.StaticBox(self, -1, u'登录'), wx.VERTICAL)
        b.Add(wx.StaticText(self, -1, u'请输入用户名和密码\n'
                u'(游客请输入guest,密码为空)'), 0, wx.ALL, 3)
        grid = wx.FlexGridSizer(2, 0, 3, 3)
        grid.AddGrowableCol(1)
        grid.Add(wx.StaticText(self, -1, u'用户名:'))
        grid.Add(self.ctrl_username, 0, wx.GROW)
        grid.Add(wx.StaticText(self, -1, u'密码:'))
        grid.Add(self.ctrl_passwd, 0, wx.GROW)
        b.Add(grid, 0, wx.GROW|wx.ALL, 3)
        sizer.Add(b, 0, wx.GROW|wx.ALL, 3)

        h = wx.BoxSizer(wx.HORIZONTAL)
        h.Add(self.ctrl_login, 0, wx.ALL, 3)
        h.Add(self.ctrl_cancel, 0, wx.ALL, 3)
        h.Add((0, 0), 1)
#        h.Add(self.ctrl_register, 0, wx.ALL, 3)
        sizer.Add(h, 0, wx.GROW)

        self.SetAutoLayout(True)
        self.SetSizerAndFit(sizer)



if __name__ == '__main__':
    app = wx.PySimpleApp()
    dlg = LoginDialog(None)
    dlg.ShowModal()
    dlg.Destroy()
    app.MainLoop()


-- 
Qiangning Hong, Registered Linux User #396996
My Blog: http://www.hn.org/hongqn
RSS: http://feeds.feedburner.com/hongqn


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年11月07日 星期一 16:58

limodou limodou at gmail.com
Mon Nov 7 16:58:35 HKT 2005

在 05-11-7,mydooom<mydooom at gmail.com> 写道:
> 谢谢,如:
> 用户名:   输入框
> 密码:     输入框
>    登陆   取消
>
>
> 我用box布局一直没有搞定。。谢谢各位了。

class UserDialog(wx.Dialog):
	def __init__(self, parent, ftpname, user, password):
		wx.Dialog.__init__(self, parent, -1, style =
wx.DEFAULT_DIALOG_STYLE, title = tr("Ftp site: %s") % ftpname)

		box = wx.BoxSizer(wx.VERTICAL)
		box1 = wx.BoxSizer(wx.HORIZONTAL)

		#username
		obj = wx.StaticText(self, -1, tr('User Name:'))
		box1.Add(obj, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, 2)
		self.txtUser = wx.TextCtrl(self, -1, user, size=(80, 20))
		box1.Add(self.txtUser, 0, wx.ALIGN_CENTER_VERTICAL|wx.RIGHT, 2)

		box.Add(box1, 0, wx.ALL, 3)

		box1 = wx.BoxSizer(wx.HORIZONTAL)

		#password
		obj = wx.StaticText(self, -1, tr('Password:'))
		box1.Add(obj, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, 2)
		self.txtPassword = wx.TextCtrl(self, -1, password, size=(80, 20),
style=wx.TE_PASSWORD)
		box1.Add(self.txtPassword, 0, wx.ALIGN_CENTER_VERTICAL|wx.RIGHT, 2)

		box.Add(box1, 0, wx.ALL, 3)

		box2 = wx.BoxSizer(wx.HORIZONTAL)

		btnOK = wx.Button(self, wx.ID_OK, tr("OK"), size=(60, -1))
		btnOK.SetDefault()
		box2.Add(btnOK, 0, wx.ALIGN_RIGHT|wx.RIGHT, 5)
		btnCancel = wx.Button(self, wx.ID_CANCEL, tr("Cancel"), size=(60, -1))
		box2.Add(btnCancel, 0, wx.ALIGN_LEFT|wx.LEFT, 5)
		box.Add(box2, 0, wx.ALIGN_CENTER|wx.BOTTOM, 5)

		self.SetSizer(box)
		self.SetAutoLayout(True)

		box.Fit(self)

		wx.EVT_UPDATE_UI(btnOK, wx.ID_OK, self.OnUpdateUI)

	def GetValue(self):
		return self.txtUser.GetValue(), self.txtPassword.GetValue()

	def OnUpdateUI(self, event):
		eid = event.GetId()
		if eid == wx.ID_OK:
			event.Enable(len(self.txtUser.GetValue()) > 0)

这是在NewEdit中的mixins/FtpClass.py中的代码,与一般的对话框一样使用,如:

dlg = UserDialog(self, site['name'], user, password)
answer = dlg.ShowModal()
if answer == wx.ID_OK:
	user, password = dlg.GetValue()
dlg.Destroy()

如果使用EasyGui可以减少界面生成的代码。



--
I like python!
My Blog: http://www.donews.net/limodou
NewEdit Maillist: http://groups.google.com/group/NewEdit

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号