wxPython界面布局小经验

年初第一次做wxPython程序的时候都是使用size和position参数对界面元素进行了固化操作。最近看《Python基础教程(第2版)》时发现了一个更好的界面布局方法:使用proportion参数使得界面元素自行根据窗口大小进行调整,再配合与flag中各类Style,就可以轻松写出布局干净的程序界面。

参数:proportion

功能:根据窗口改变大小时所分配的空间设置界面元素比例。

所属方法:wx.BoxSizer

 

参数:flag

功能:设置界面元素的Style

所属方法:wx.BoxSizer

 

下面时一段小例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/usr/bin/env python
#coding:utf-8
 
import wx
import sys
 
class LoginDialog(wx.Dialog):
    def __init__(self):
        wx.Dialog.__init__(self,None,title="Login",size=(280,140))
        self.InitUI()
        self.ShowModal()
 
    def InitUI(self):
        vbox = wx.BoxSizer(wx.VERTICAL)
 
        nameLabel = wx.StaticText(self,label="      Name:")
        nameText = wx.TextCtrl(self)
        ipLabel = wx.StaticText(self,label="Server IP:")
        ipText = wx.TextCtrl(self)
 
        loginButton = wx.Button(self,label="Login")
        exitButton = wx.Button(self,label="Exit")
 
        loginButton.Bind(wx.EVT_BUTTON,self.OnLogin)
        exitButton.Bind(wx.EVT_BUTTON,self.OnExit)
 
        hbox_1 = wx.BoxSizer()
        hbox_1.Add(nameLabel,proportion=0,flag=wx.ALL | wx.EXPAND | wx.ALIGN_LEFT,border=2)
        hbox_1.Add(nameText,proportion=2,flag=wx.ALL | wx.EXPAND |wx.ALIGN_CENTER,border=2)
 
        hbox_2 = wx.BoxSizer()
        hbox_2.Add(ipLabel,proportion=0,flag=wx.ALL | wx.EXPAND | wx.ALIGN_LEFT,border=2)
        hbox_2.Add(ipText,proportion=2,flag=wx.ALL | wx.EXPAND | wx.ALIGN_CENTER,border=2)
 
        hbox_3 = wx.BoxSizer()
        hbox_3.Add(loginButton,proportion=0,flag=wx.ALL | wx.EXPAND | wx.ALIGN_CENTER,border=2)
        hbox_3.Add(exitButton,proportion=0,flag=wx.ALL | wx.EXPAND | wx.ALIGN_CENTER,border=2)
 
        vbox.Add(hbox_1,proportion=1,flag=wx.ALL | wx.EXPAND,border=2)
        vbox.Add(hbox_2,proportion=1,flag=wx.ALL | wx.EXPAND,border=2)
        vbox.Add(hbox_3,proportion=0,flag=wx.ALL | wx.ALIGN_CENTER,border=2)
 
        self.SetSizer(vbox)
 
    def OnLogin(self,e):
        self.Destroy()
 
    def OnExit(self,e):
        self.Destroy()
        sys.exit()
 
if __name__ == '__main__':
    app = wx.App()
    dlg = LoginDialog()
    app.MainLoop()

解释1:proportion是指BoxSizer绑定界面元素时界面元素所占BoxSizer的比例,默认proportion的值为0。在同一个BoxSizer中的界面元素会根据proportion的值进行自动调整元素的大小。也就是说proportion值越大,该元素所占空间就越多。那么当我们进行为界面布局进行编写代码时,只需合理的安排名proportion值即可实现各元素间的布局。

解释2:为了使proportion参数能够其作用,实现界面元素的自动大小调整,flag参数的wx.EXPAND值就非常重要。若proportion的值大于0(不包括0),那么flag参数中就应该有wx.EXPAND值。

下面是本例的运行图:

 

有任何疑问可评论探讨。欢迎指错。

猎人笔记

我的猎人笔记复活了。经历了3个多月的时间,今晚我重新建了个博客。这大概是我建立的第四个博客了吧(或者是第五个),从之前使用博客服务商到现在自己用Wordpress架设。其实这两年已经没有很多的动力去写以前的那种文字了,是因为我懒了,懒得去思考了,也是因为自己变得浮躁了,变得更加世俗了。我一直认为以前的那个自己,有一种别样的特别,而现在没有了。

自己也挺蠢的,在建立主机的时候把主域名tarkrul.tk写成了tarkrul.dk,还好没什么影响,不知道为什么想的是.dk。域名用了个免费的.tk,我觉得挺适合我选择的这个名字:tarkrul,应该很好记。

说说这博客名的来源吧,很简单,有本随笔小说叫《猎人笔记》,是俄罗斯作家屠格涅夫的作品。我很少看随机类的文章,但这部我觉得不错,因为我喜欢看18世纪19世纪普通百姓的故事。我用这个名字的另一个原因是猎人二字,因为高中时玩魔兽世界时我选择的是个猎人也职业,而那段游戏经历值得我记住一辈子。这就是博客名的由来,我想不会再变了。