- 浏览: 340947 次
- 性别:
- 来自: 安徽
文章分类
最新评论
-
secally:
楼主可以上传个例子吗,谢谢,我咋跑不起来,,eclipse不是 ...
Android自动打包、签名、优化、上传ANT脚本 -
secally:
请问下执行命令是啥,ant release 还是?麻烦指教谢谢 ...
Android自动打包、签名、优化、上传ANT脚本 -
trp1022:
好牛啊
程序员不能不通文史 -
sunny78117:
谢谢,写得好
Android bitmap优化 -
futurebp:
这是什么类型的脚本啊?
Android自动打包、签名、优化、上传ANT脚本
在 wxPython 有两种方法对窗口内的 widgets 进行布局: 绝对定位(Absolute Positioning) 首先必须了解一下因使用绝对定位而造成的问题: 下面的例子是一个简单编辑器的框架,使用了绝对定位布局,可以发现,当我们改变窗口大小, wx.TextCtrl 的大小并没有随之改变。 import wx class Absolute(wx.Frame): menubar = wx.MenuBar() menubar.Append(file, ‘&File’) wx.TextCtrl(panel, -1, pos=(-1, -1), size=(250, 150)) self.Centre() app = wx.App(0) 在 wx.TextCtrl 的构造函数里使用了绝对定位的参数。 使用 sizers sizers 可以解决上面使用绝对定位而造成的布局问题。下面是一些可选反对使用的 sizers: import wx class Sizer(wx.Frame): menubar = wx.MenuBar() menubar.Append(file, ‘&File’) wx.TextCtrl(self, -1) self.Centre() app = wx.App(0) 你可能会问,在上面的代码中怎么没见到任何的 sizers 对象?实际上,wx.Frame 已经内建了一个 sizer,而且,只能放置一个 widget 到 wx.Frame 上。 wx.BoxSizer 可以使放置其上的 widgets 成行或者成列排列,我们也可以放置 sizer 到另一个 sizer 上,以便于创建复杂的布局。 参数 orientation(方向)可以是 wx.VERTICAL 或者 wx.HORIZONTAL。通过 Add() 方法可以添加 widgets 到 sizer 上。proportion(比例)参数。假设我们将三个按钮添加到一个 horizontal wx.BoxSizer 上,它们的 proportions 参数分别为 0、1、2。当窗口发生改变时, proportion 参数被设置为0的按钮不会在水平方向发生改变,而被设置为2 的按钮的大小始终是设置为1的按钮的两倍。border 参数用于控制边框,可以下面的值或者它们的组合值: import wx class Border(wx.Frame): panel = wx.Panel(self, -1) midPan = wx.Panel(panel, -1) vbox.Add(midPan, 1, wx.EXPAND | wx.ALL, 20) app = wx.App() 上面的代码将为 midPan 面板的四边添加宽度为20像素的边框。 wx.EXPAND 使 widget 占据分配到的全部空间。最后,我们也可以定义 widgets 的对齐方式: 实例(Go To Class) 在下面的例子中,我们将引入几个重要的构思。 import wx class GoToClass(wx.Frame): font = wx.SystemSettings_GetFont(wx.SYS_SYSTEM_FONT) vbox = wx.BoxSizer(wx.VERTICAL) hbox1 = wx.BoxSizer(wx.HORIZONTAL) vbox.Add((-1, 10)) hbox2 = wx.BoxSizer(wx.HORIZONTAL) vbox.Add((-1, 10)) hbox3 = wx.BoxSizer(wx.HORIZONTAL) vbox.Add((-1, 25)) hbox4 = wx.BoxSizer(wx.HORIZONTAL) vbox.Add((-1, 25)) hbox5 = wx.BoxSizer(wx.HORIZONTAL) panel.SetSizer(vbox) app = wx.App() 我们创建一个 vertical sizer,并且将5个 horizontal sizers 放置于上面。 设置窗口字体的大小为9px。 实例(Find/Replace Dialog) 下面是一个复杂的例子 ── 查找/替换对话框。 import wx class FindReplace(wx.Dialog): vbox_top = wx.BoxSizer(wx.VERTICAL) vbox = wx.BoxSizer(wx.VERTICAL) # panel1 panel1 = wx.Panel(panel, -1) panel1.SetSizer(grid1) # panel2 panel2 = wx.Panel(panel, -1) sizer21 = wx.StaticBoxSizer(wx.StaticBox(panel2, -1, ‘Direction’), orient=wx.VERTICAL) sizer22 = wx.StaticBoxSizer(wx.StaticBox(panel2, -1, ‘Scope’), orient=wx.VERTICAL) panel2.SetSizer(hbox2) # panel3 panel3 = wx.Panel(panel, -1) panel3.SetSizer(sizer3) # panel4 panel4 = wx.Panel(panel, -1) panel4.SetSizer(sizer4) # panel5 panel5 = wx.Panel(panel, -1) panel5.SetSizer(sizer5) vbox_top.Add(vbox, 1, wx.LEFT, 5) self.Centre() app = wx.App() 备注:对于 Windows 用户,请在 ShowModal() 行前加入 self.SetClientSize(panel.GetBestSize()) 行。 wx.GridSizer 这是 wx.GridSizer 的构造函数。分别定义布局表格的行列数以及行列的大小。 下面使用 wx.GridSizer 来构造一个计算器的基本骨架。 import wx class GridSizer(wx.Frame): menubar = wx.MenuBar() self.Bind(wx.EVT_MENU, self.OnClose, id=1) sizer = wx.BoxSizer(wx.VERTICAL) gs.AddMany( [(wx.Button(self, -1, 'Cls'), 0, wx.EXPAND), sizer.Add(gs, 1, wx.EXPAND) def OnClose(self, event): app = wx.App() 注意,我们在 Bck 和 Close 按钮之间放置一个空白的 wx.StaticText,这是布局上的一个有用技巧。 例子中的 AddMany() 方法可以一次过放置多个 widgets 到 sizer 上。 widgets 放置在布局表格上是按一定顺序的,先放满第一行,再放置第二行…如此类推。 wx.FlexGridSizer wx.FlexGridSizer 跟 wx.GridSizer 相似,但提供更多的灵活性。在 wx.GridSizer 中,所有的单元格都必须大小相同。而在 wx.FlexGridSizer 中,同行的单元格的高度相同,同列的单元格的宽度相同,而不同的列和行可以高宽度不同。 这是 wx.FlesGridSizer 的构造函数,跟 wx.GridSizer 的构造函数相似。 import wx class FlexGridSizer(wx.Frame): panel = wx.Panel(self, -1) hbox = wx.BoxSizer(wx.HORIZONTAL) fgs = wx.FlexGridSizer(3, 2, 9, 25) title = wx.StaticText(panel, -1, ‘Title’) tc1 = wx.TextCtrl(panel, -1) fgs.AddMany([(title), (tc1, 1, wx.EXPAND), (author), (tc2, 1, wx.EXPAND), fgs.AddGrowableRow(2, 1) hbox.Add(fgs, 1, wx.ALL | wx.EXPAND, 15) self.Centre() app = wx.App() 我们设置第三行和第二列为可变大小,这样,当窗口大小改变时,文本控件也随之改变。当然,不要忘记设置相应的 widgets 的 wx.EXPAND。 wx.GridBagSizer 这是 wxPython 中最复杂的一个 sizer,它可以精确的定位 widgets。下面是 wx.GridBagSizer 的构造函数: 通过 Add() 方法放置 widgets: pos 参数指定放置于虚拟表格的位置 ── 左上角为 (0,0)。span 参数是一个可选参数,指定 widgets 的跨度,例如,(3,2) 表示 widget 跨越 3 行 2 列。falg 和 border 参数跟 wx.BoxSizer 的相同。如果想设置可改变的表格,可以使用下面的方法: 实例(Rename dialog) 这是一个简单的示例。我们不必因为 wx.GridBagSizer 的过于复杂而担心,一旦我们理解它的原理,使用起来也会很简单的。 import wx class Rename(wx.Frame): panel = wx.Panel(self, -1) text = wx.StaticText(panel, -1, ‘Rename To’) tc = wx.TextCtrl(panel, -1) buttonOk = wx.Button(panel, -1, ‘Ok’, size=(90, 28)) sizer.AddGrowableCol(1) app = wx.App() 将文本 “Rename to”放于窗口的左上角,因此将 pos 指定为 (0,0)。 将文本输入框放于第二行的始端(1,0) ── 紧记,是用 0 开始计数的。同时文本框跨越1行5列(1,5)。 在第4行放置两个按钮(第三行我们空着),分别放于第4列和第5列。 实例(Open Resource) import wx class OpenResource(wx.Frame): panel = wx.Panel(self, -1) text1 = wx.StaticText(panel, -1, ‘Select a resource to open’) tc = wx.TextCtrl(panel, -1) text2 = wx.StaticText(panel, -1, ‘Matching resources’) list1 = wx.ListBox(panel, -1, style=wx.LB_ALWAYS_SB) text3 = wx.StaticText(panel, -1, ‘In Folders’) list2 = wx.ListBox(panel, -1, style=wx.LB_ALWAYS_SB) cb = wx.CheckBox(panel, -1, ‘Show derived resources’) buttonOk = wx.Button(panel, -1, ‘OK’, size=(90, 28)) help = wx.BitmapButton(panel, -1, wx.Bitmap(‘icons/help16.png’), style=wx.NO_BORDER) sizer.AddGrowableCol(0) self.Centre() app = wx.App() 实例(Create new class) import wx class NewClass(wx.Frame): panel = wx.Panel(self, -1) text1 = wx.StaticText(panel, -1, ‘Java Class’) icon = wx.StaticBitmap(panel, -1, wx.Bitmap(‘icons/exec.png’)) line = wx.StaticLine(panel, -1 ) text2 = wx.StaticText(panel, -1, ‘Name’) tc1 = wx.TextCtrl(panel, -1, size=(-1, 30)) text3 = wx.StaticText(panel, -1, ‘Package’) tc2 = wx.TextCtrl(panel, -1) button1 = wx.Button(panel, -1, ‘Browse…’, size=(-1, 30)) text4 = wx.StaticText(panel, -1, ‘Extends’) combo = wx.ComboBox(panel, -1, ) button2 = wx.Button(panel, -1, ‘Browse…’, size=(-1, 30)) sb = wx.StaticBox(panel, -1, ‘Optional Attributes’) button4 = wx.Button(panel, -1, ‘Ok’, size=(-1, 30)) button5 = wx.Button(panel, -1, ‘Cancel’, size=(-1, 30)) sizer.AddGrowableCol(2) app = wx.App() 注意,这里我们使用负数来设置 top border,这相当于设置 bottom border 为15px。 确保窗口的大小可以覆盖所有 widgets。
# absolute.py
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(250, 180))
panel = wx.Panel(self, -1)
file = wx.Menu()
edit = wx.Menu()
help = wx.Menu()
menubar.Append(edit, ‘&Edit’)
menubar.Append(help, ‘&Help’)
self.SetMenuBar(menubar)
self.Show(True)
Absolute(None, -1, ”)
app.MainLoop()
# sizer.py
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(250, 180))
file = wx.Menu()
edit = wx.Menu()
help = wx.Menu()
menubar.Append(edit, ‘&Edit’)
menubar.Append(help, ‘&Help’)
self.SetMenuBar(menubar)
self.Show(True)
Sizer(None, -1, ”)
app.MainLoop()
box.Add(wx.Window window, integer proportion=0, integer flag = 0, integer border = 0)
# border.py
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(250, 200))
panel.SetBackgroundColour(‘#4f5049′)
vbox = wx.BoxSizer(wx.VERTICAL)
midPan.SetBackgroundColour(‘#ededed’)
panel.SetSizer(vbox)
self.Centre()
self.Show(True)
Border(None, -1, ”)
app.MainLoop()
# gotoclass.py
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(390, 350))
panel = wx.Panel(self, -1)
font.SetPointSize(9)
st1 = wx.StaticText(panel, -1, ‘Class Name’)
st1.SetFont(font)
hbox1.Add(st1, 0, wx.RIGHT, 8)
tc = wx.TextCtrl(panel, -1)
hbox1.Add(tc, 1)
vbox.Add(hbox1, 0, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, 10)
st2 = wx.StaticText(panel, -1, ‘Matching Classes’)
st2.SetFont(font)
hbox2.Add(st2, 0)
vbox.Add(hbox2, 0, wx.LEFT | wx.TOP, 10)
tc2 = wx.TextCtrl(panel, -1, style=wx.TE_MULTILINE)
hbox3.Add(tc2, 1, wx.EXPAND)
vbox.Add(hbox3, 1, wx.LEFT | wx.RIGHT | wx.EXPAND, 10)
cb1 = wx.CheckBox(panel, -1, ‘Case Sensitive’)
cb1.SetFont(font)
hbox4.Add(cb1)
cb2 = wx.CheckBox(panel, -1, ‘Nested Classes’)
cb2.SetFont(font)
hbox4.Add(cb2, 0, wx.LEFT, 10)
cb3 = wx.CheckBox(panel, -1, ‘Non-Project classes’)
cb3.SetFont(font)
hbox4.Add(cb3, 0, wx.LEFT, 10)
vbox.Add(hbox4, 0, wx.LEFT, 10)
btn1 = wx.Button(panel, -1, ‘Ok’, size=(70, 30))
hbox5.Add(btn1, 0)
btn2 = wx.Button(panel, -1, ‘Close’, size=(70, 30))
hbox5.Add(btn2, 0, wx.LEFT | wx.BOTTOM , 5)
vbox.Add(hbox5, 0, wx.ALIGN_RIGHT | wx.RIGHT, 10)
self.Centre()
self.Show(True)
GoToClass(None, -1, ‘Go To Class’)
app.MainLoop()
font.SetPointSize(9)
# Find/Replace Dialog
def __init__(self, parent, id, title):
wx.Dialog.__init__(self, parent, id, title, size=(255, 365))
panel = wx.Panel(self, -1)
grid1 = wx.GridSizer(2, 2)
grid1.Add(wx.StaticText(panel1, -1, ‘Find: ‘, (5, 5)), 0, wx.ALIGN_CENTER_VERTICAL)
grid1.Add(wx.ComboBox(panel1, -1, size=(120, -1)))
grid1.Add(wx.StaticText(panel1, -1, ‘Replace with: ‘, (5, 5)), 0, wx.ALIGN_CENTER_VERTICAL)
grid1.Add(wx.ComboBox(panel1, -1, size=(120, -1)))
vbox.Add(panel1, 0, wx.BOTTOM | wx.TOP, 9)
hbox2 = wx.BoxSizer(wx.HORIZONTAL)
sizer21.Add(wx.RadioButton(panel2, -1, ‘Forward’, style=wx.RB_GROUP))
sizer21.Add(wx.RadioButton(panel2, -1, ‘Backward’))
hbox2.Add(sizer21, 1, wx.RIGHT, 5)
# we must define wx.RB_GROUP style, otherwise all 4 RadioButtons would be mutually exclusive
sizer22.Add(wx.RadioButton(panel2, -1, ‘All’, style=wx.RB_GROUP))
sizer22.Add(wx.RadioButton(panel2, -1, ‘Selected Lines’))
hbox2.Add(sizer22, 1)
vbox.Add(panel2, 0, wx.BOTTOM, 9)
sizer3 = wx.StaticBoxSizer(wx.StaticBox(panel3, -1, ‘Options’), orient=wx.VERTICAL)
vbox3 = wx.BoxSizer(wx.VERTICAL)
grid = wx.GridSizer(3, 2, 0, 5)
grid.Add(wx.CheckBox(panel3, -1, ‘Case Sensitive’))
grid.Add(wx.CheckBox(panel3, -1, ‘Wrap Search’))
grid.Add(wx.CheckBox(panel3, -1, ‘Whole Word’))
grid.Add(wx.CheckBox(panel3, -1, ‘Incremental’))
vbox3.Add(grid)
vbox3.Add(wx.CheckBox(panel3, -1, ‘Regular expressions’))
sizer3.Add(vbox3, 0, wx.TOP, 4)
vbox.Add(panel3, 0, wx.BOTTOM, 15)
sizer4 = wx.GridSizer(2, 2, 2, 2)
sizer4.Add(wx.Button(panel4, -1, ‘Find’, size=(120, -1)))
sizer4.Add(wx.Button(panel4, -1, ‘Replace/Find’, size=(120, -1)))
sizer4.Add(wx.Button(panel4, -1, ‘Replace’, size=(120, -1)))
sizer4.Add(wx.Button(panel4, -1, ‘Replace All’, size=(120, -1)))
vbox.Add(panel4, 0, wx.BOTTOM, 9)
sizer5 = wx.BoxSizer(wx.HORIZONTAL)
sizer5.Add((191, -1), 1, wx.EXPAND | wx.ALIGN_RIGHT)
sizer5.Add(wx.Button(panel5, -1, ‘Close’, size=(50, -1)))
vbox.Add(panel5, 1, wx.BOTTOM, 9)
panel.SetSizer(vbox_top)
self.ShowModal()
self.Destroy()
FindReplace(None, -1, ‘Find/Replace’)
app.MainLoop()
# gridsizer.py
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(300, 250))
file = wx.Menu()
file.Append(1, ‘&Quit’, ‘Exit Calculator’)
menubar.Append(file, ‘&File’)
self.SetMenuBar(menubar)
self.display = wx.TextCtrl(self, -1, ”, style=wx.TE_RIGHT)
sizer.Add(self.display, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 4)
gs = wx.GridSizer(4, 4, 3, 3)
(wx.Button(self, -1, 'Bck'), 0, wx.EXPAND),
(wx.StaticText(self, -1, ''), 0, wx.EXPAND),
(wx.Button(self, -1, 'Close'), 0, wx.EXPAND),
(wx.Button(self, -1, '7'), 0, wx.EXPAND),
(wx.Button(self, -1, '8'), 0, wx.EXPAND),
(wx.Button(self, -1, '9'), 0, wx.EXPAND),
(wx.Button(self, -1, '/'), 0, wx.EXPAND),
(wx.Button(self, -1, '4'), 0, wx.EXPAND),
(wx.Button(self, -1, '5'), 0, wx.EXPAND),
(wx.Button(self, -1, '6'), 0, wx.EXPAND),
(wx.Button(self, -1, '*'), 0, wx.EXPAND),
(wx.Button(self, -1, '1'), 0, wx.EXPAND),
(wx.Button(self, -1, '2'), 0, wx.EXPAND),
(wx.Button(self, -1, '3'), 0, wx.EXPAND),
(wx.Button(self, -1, '-'), 0, wx.EXPAND),
(wx.Button(self, -1, '0'), 0, wx.EXPAND),
(wx.Button(self, -1, '.'), 0, wx.EXPAND),
(wx.Button(self, -1, '='), 0, wx.EXPAND),
(wx.Button(self, -1, '+'), 0, wx.EXPAND) ])
self.SetSizer(sizer)
self.Centre()
self.Show(True)
self.Close()
GridSizer(None, -1, ‘GridSizer’)
app.MainLoop()
# flexgridsizer.py
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(290, 250))
author = wx.StaticText(panel, -1, ‘Author’)
review = wx.StaticText(panel, -1, ‘Review’)
tc2 = wx.TextCtrl(panel, -1)
tc3 = wx.TextCtrl(panel, -1, style=wx.TE_MULTILINE)
(review, 1, wx.EXPAND), (tc3, 1, wx.EXPAND)])
fgs.AddGrowableCol(1, 1)
panel.SetSizer(hbox)
self.Show(True)
FlexGridSizer(None, -1, ‘FlexGridSizer’)
app.MainLoop()
AddGrowableCol(integer col)
# rename.py
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(320, 130))
sizer = wx.GridBagSizer(4, 4)
sizer.Add(text, (0, 0), flag=wx.TOP | wx.LEFT | wx.BOTTOM, border=5)
sizer.Add(tc, (1, 0), (1, 5), wx.EXPAND | wx.LEFT | wx.RIGHT, 5)
buttonClose = wx.Button(panel, -1, ‘Close’, size=(90, 28))
sizer.Add(buttonOk, (3, 3))
sizer.Add(buttonClose, (3, 4), flag=wx.RIGHT | wx.BOTTOM, border=5)
sizer.AddGrowableRow(2)
panel.SetSizerAndFit(sizer)
self.Centre()
self.Show(True)
Rename(None, -1, ‘Rename Dialog’)
app.MainLoop()
sizer.Add(text, (0, 0), flag=wx.TOP | wx.LEFT | wx.BOTTOM, border=5)
sizer.Add(tc, (1, 0), (1, 5), wx.EXPAND | wx.LEFT | wx.RIGHT, 5)
sizer.Add(buttonClose, (3, 4), flag=wx.RIGHT | wx.BOTTOM, border=5)
# openresource.py
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(400, 500))
sizer = wx.GridBagSizer(4, 4)
sizer.Add(text1, (0, 0), flag=wx.TOP | wx.LEFT | wx.BOTTOM, border=5)
sizer.Add(tc, (1, 0), (1, 3), wx.EXPAND | wx.LEFT | wx.RIGHT, 5)
sizer.Add(text2, (2, 0), flag=wx.TOP | wx.LEFT | wx.BOTTOM, border=5)
sizer.Add(list1, (3, 0), (5, 3), wx.EXPAND | wx.LEFT | wx.RIGHT, 5)
sizer.Add(text3, (8, 0), flag=wx.TOP | wx.LEFT | wx.BOTTOM, border=5)
sizer.Add(list2, (9, 0), (3, 3), wx.EXPAND | wx.LEFT | wx.RIGHT, 5)
sizer.Add(cb, (12, 0), flag=wx.LEFT | wx.RIGHT, border=5)
buttonCancel = wx.Button(panel, -1, ‘Cancel’, size=(90, 28))
sizer.Add(buttonOk, (14, 1))
sizer.Add(buttonCancel, (14, 2), flag=wx.RIGHT | wx.BOTTOM, border=5)
sizer.Add(help, (14, 0), flag=wx.LEFT, border=5)
sizer.AddGrowableRow(3)
sizer.AddGrowableRow(9)
sizer.SetEmptyCellSize((5, 5))
panel.SetSizer(sizer)
self.Show(True)
OpenResource(None, -1, ‘Open Resource’)
app.MainLoop()
# newclass.py
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title)
sizer = wx.GridBagSizer(0, 0)
sizer.Add(text1, (0, 0), flag=wx.TOP | wx.LEFT | wx.BOTTOM, border=15)
sizer.Add(icon, (0, 4), flag=wx.LEFT, border=45)
sizer.Add(line, (1, 0), (1, 5), wx.TOP | wx.EXPAND, -15)
sizer.Add(text2, (2, 0), flag=wx.LEFT, border=10)
sizer.Add(tc1, (2, 1), (1, 3), wx.TOP | wx.EXPAND, -5)
sizer.Add(text3, (3, 0), flag= wx.LEFT | wx.TOP, border=10)
sizer.Add(tc2, (3, 1), (1, 3), wx.TOP | wx.EXPAND, 5)
sizer.Add(button1, (3, 4), (1, 1), wx.TOP | wx.LEFT | wx.RIGHT , 5)
sizer.Add(text4, (4, 0), flag=wx.TOP | wx.LEFT, border=10)
sizer.Add(combo, (4, 1), (1, 3), wx.TOP | wx.EXPAND, 5)
sizer.Add(button2, (4, 4), (1, 1), wx.TOP | wx.LEFT | wx.RIGHT , 5)
boxsizer = wx.StaticBoxSizer(sb, wx.VERTICAL)
boxsizer.Add(wx.CheckBox(panel, -1, ‘Public’), 0, wx.LEFT | wx.TOP, 5)
boxsizer.Add(wx.CheckBox(panel, -1, ‘Generate Default Constructor’), 0, wx.LEFT, 5)
boxsizer.Add(wx.CheckBox(panel, -1, ‘Generate Main Method’), 0, wx.LEFT | wx.BOTTOM, 5)
sizer.Add(boxsizer, (5, 0), (1, 5), wx.EXPAND | wx.TOP | wx.LEFT | wx.RIGHT , 10)
button3 = wx.Button(panel, -1, ‘Help’, size=(-1, 30))
sizer.Add(button3, (7, 0), (1, 1), wx.LEFT, 10)
sizer.Add(button4, (7, 3), (1, 1), wx.LEFT, 10)
sizer.Add(button5, (7, 4), (1, 1), wx.LEFT | wx.BOTTOM | wx.RIGHT, 10)
sizer.Fit(self)
panel.SetSizer(sizer)
self.Centre()
self.Show(True)
NewClass(None, -1, ‘Create Java Class’)
app.MainLoop()
评论
不知Python 在UI方面有没有好的所见即所得的编辑器?
你想要的就是qt,使用qt设计器设计好的iui文件可以转换为c++代码,python代码,java代码等。
完全的设计与逻辑分离。
我记得PyQt是收钱的?
商业使用需付费购买
你商用掏钱不就行了吗,linux下还有pyside可用
QT有OPEN SOURCE的和商业之分,所以可以选择付费与否。
不知Python 在UI方面有没有好的所见即所得的编辑器?
你想要的就是qt,使用qt设计器设计好的iui文件可以转换为c++代码,python代码,java代码等。
完全的设计与逻辑分离。
我记得PyQt是收钱的?
商业使用需付费购买
你商用掏钱不就行了吗,linux下还有pyside可用
不知Python 在UI方面有没有好的所见即所得的编辑器?
你想要的就是qt,使用qt设计器设计好的iui文件可以转换为c++代码,python代码,java代码等。
完全的设计与逻辑分离。
我记得PyQt是收钱的?
不知Python 在UI方面有没有好的所见即所得的编辑器?
你想要的就是qt,使用qt设计器设计好的iui文件可以转换为c++代码,python代码,java代码等。
完全的设计与逻辑分离。
不知Python 在UI方面有没有好的所见即所得的编辑器?
这种自释的代码再加注释就是鸡肋。
发表评论
-
Jython+Grails 出现无法导入模块的错误解决方法
2010-06-30 13:54 1228版权所有,欢迎转载,转载请注明 : SinFrancis h ... -
python字符串使用总结
2010-01-14 11:15 24191.python 字符串通常有单引号('...')、双引号 ... -
Python正则表达式资料
2010-01-04 13:33 889请参见: http://wiki.ubuntu.org.cn ... -
Python学习第四天-Python中的自省
2009-11-25 11:26 1230Python 中万物皆对象,自省是指代码可以查看内存中以对象形 ... -
Python学习第三天-Python中的数据结构
2009-11-20 10:22 785Python有列表 元组(数组) 字典(map表结构) 序列 ... -
Python学习第二天-Python模块的__name__
2009-11-19 16:58 1115模块的__name__ 每个模块都有一个名称,在模块中可以通 ... -
Python学习第一天-Python中的类
2009-11-18 11:46 1121Dive Into Python http:// ...
相关推荐
**Sizers**是一种更加灵活的布局管理机制,它可以根据窗口大小的变化自动调整组件的位置和大小。wxPython提供了多种类型的sizers,每种都有其适用场景。 #### 四、Sizers详解 ##### 4.1 wx.BoxSizer `wx.BoxSizer`...
WxPython可视化编辑器是一款基于Python的开发工具,它整合了WxPython库的强大功能,为程序员提供了一个直观、易用的界面来构建GUI(图形用户界面)应用程序。WxPython是Python编程语言中广泛使用的GUI工具包,它实现...
2. **布局管理器**:wxPython使用布局管理器(如BoxSizer、GridSizer、FlexGridSizer)来帮助组织和调整窗口中的控件。了解它们的工作原理和配置方式,可以创建出美观且适应不同屏幕尺寸的界面。 3. **事件处理**:...
2. **框架(Frames)**:框架是wxPython应用中的顶级窗口,可以包含其他控件和布局管理器。 3. **面板(Panels)**:面板是放置在框架内的容器,用于组织和排列控件。 4. **布局管理器(Layout Managers)**:布局...
【wxPython Demo】是wxPython库附带的一系列示例和教程,用于展示如何使用wxPython的各种控件、布局管理器和其他功能。通过这些演示,开发者可以直观地了解如何创建窗口、按钮、菜单、对话框等元素,并了解它们在...
9. 布局管理:讲解了布局管理器在wxPython中的使用,包括如何组织和排列窗口中的控件。 10. wx.BoxSizer类:通过wx.BoxSizer类展示如何使用Box布局管理器进行布局。 11. wx.GridSizer类:介绍了Grid布局管理器的...
4. **布局管理器**:为了使界面在不同平台上看起来一致,wxPython提供了多种布局管理器,如BoxSizer、GridSizer和FlexGridSizer。它们可以帮助自动调整控件的位置和大小。 5. **样式和主题**:wxPython支持自定义...
1. **BoxSizer**: 这是最基础的布局管理器,可以按行或列排列控件。 2. **GridSizer**: 用于创建网格布局,方便对控件进行等间距排列。 3. **FlexGridSizer**: 更灵活的网格布局,允许不同行和列有不同的大小。 4. *...
2. **基础知识**:讲解`wxPython`的基本概念,如窗口、框架、面板、事件处理和布局管理器。 3. **控件与组件**:详述各种控件的使用,如按钮、文本框、复选框、单选按钮、列表框、滑块等,以及如何在界面中添加它们...
6. **布局管理**: 为了合理地排列控件,可以使用布局管理器,如`BoxSizer`或`GridSizer`。例如: ```python sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(button, 0, wx.ALL, 5) frame.SetSizer(sizer) ``` 7....
布局管理器如 `BoxSizer` 和 `GridSizer` 负责安排这些控件在窗口中的位置和大小,确保界面在不同屏幕尺寸下都能适应。 **5. 事件处理** `wxPython` 通过绑定事件处理函数来响应用户的交互,例如点击按钮、改变...
在wxPython中,布局管理是创建整洁、适应性强的界面的关键。`wx.BoxSizer`、`wx.GridSizer`和`wx.FlexGridSizer`等类提供了灵活的布局方式,可以自动调整控件的位置和大小以适应窗口的变化。同时,每个控件都可以...
它提供了丰富的控件、布局管理器和事件处理机制,让开发者可以轻松地设计出各种复杂界面。 【PyOpenGL】: PyOpenGL是Python对OpenGL标准的直接绑定,它提供了对OpenGL核心函数和扩展的全面访问。OpenGL是一个低级...
- **布局管理器**:使用sizer对控件进行布局管理,可以自动调整控件大小和位置。 ##### 4. 对话框 - **定义**:对话框用于与用户进行简单交互,如获取输入或确认操作。 - **类型**:wxPython提供了多种类型的...
布局管理器(如BoxSizer, GridSizer)帮助你自动调整控件的位置和大小,以适应不同的屏幕尺寸和分辨率。 2. **事件处理**:wxPython使用事件驱动模型,允许开发者响应用户的操作,如点击按钮、选择菜单项等。你需要...
wxPython提供了多种布局管理器,例如wx.BoxSizer和wx.GridSizer等。布局管理器允许开发者以灵活的方式对界面组件进行布局,而无需固定组件的坐标位置。这样做能够使应用程序具有更好的平台兼容性和适应不同的屏幕...
AUI管理器:通过aui.AuiManager来管理窗口布局,使界面更加灵活。联系人列表:使用ListCtrl控件来显示联系人信息,包括姓名、电话、微信和住址四列。工具栏:创建了一个工具栏,并添加了新建、打开、保存、编辑和...
- **第六节**:布局管理。 - **第七节**:自定义绘图。 - **第八节**:图像处理。 - **第九节**:对话框的设计。 - **第十节**:中文显示问题的解决方案及总结。 #### 六、教程特色与联系方式 - **时刻保持...
支持关联布局文件,双击保存的文件即可直接打开加载(关联后会直接重启资源管理器,有点暴力,不知道怎么简单更新文件) 使用pyec模块后可以使用已经封装的部分中文代码直接操作,具体看演示 使用方法 可直接在设计...
4. **Sizers**: 用于布局管理,帮助自动调整控件的位置和大小。 5. **Events**: 用户与 GUI 交互时触发的事件,如点击按钮、改变控件状态等。 **三、wxPython 的安装与环境配置** 1. **安装**: 可通过 pip 安装,...