首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >适合这份工作的wx.Sizer?

适合这份工作的wx.Sizer?
EN

Stack Overflow用户
提问于 2019-07-10 08:28:39
回答 2查看 0关注 0票数 0

我有一个空间,我希望某些元素(在这里由A,B,D和G表示)各自位于设计的“角落”中。角落应该排成一行,好像四个元素中的每一个都击退了另一个元素; 一个矩形。这将包含在一个不可调整的面板中。我将有几个类似的面板,并希望保持元素的位置尽可能相同。(我需要比wx.Wizard稍微复杂的东西,但是有相同的一般想法。)

代码语言:javascript
复制
AAAAAAAAAA      BB


CCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCC
CCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCC


DDD EEE FFF    GGG

A表示大字体的文本。

B表示小字体的数字进度表(例如“1 of 7”)。

C代表一大块文本。

D,E,F和G是按钮。

G按钮与其他按钮分开以实现功能。

我试图嵌套wx.BoxSizers(一个垂直框内的水平框)没有运气。我的第一个问题wx.BoxSizer.SetMinSize我的最后一行没有得到尊重。第二个问题是,我不知道如何使G按钮“占用空间”而不会变得太大,或者我如何将它卡在右边缘和底边缘上。

我曾试图使用a wx.GridBagSizer,但遇到了完全不同的问题。

经过各种在线教程和wxPython in Action之后,我有点沮丧。相关论坛似乎每两周会看一次活动。“玩弄它”让我无处可去; 我觉得好像我正试图在铺好地毯的地方找到一个驼峰。

EN

回答 2

Stack Overflow用户

发布于 2019-07-10 16:56:58

使用BoxSizer和一些标志,如wx.EXPAND和wx.ALIGN_RIGHT等,你可以得到你想要的。这是一个例子

代码语言:javascript
复制
import wx
import string
AF = string.ascii_uppercase[:7]

class MyFrame(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, size=(300,300))

        a, b, c, d, e, f, g = [wx.Button(self, -1, 4*c) for c in AF]
        a.SetMaxSize((200,100))   # 'a' won't get bigger than 200 wide

        # build the top row (with sizers I usually work from inside to out)
        hs0 = wx.BoxSizer(wx.HORIZONTAL)
        hs0.Add(a, 1, wx.ALIGN_LEFT)  # 1 here means expand with weight 1
        hs0.Add((0,0), 1)  # also expand the spacing
        hs0.Add(b, 0, wx.ALIGN_RIGHT)  # 0 means don't expand this

        # build the bottom row
        hs1 = wx.BoxSizer(wx.HORIZONTAL)
        hs1.Add(d, 0, wx.ALIGN_LEFT)
        hs1.Add((10,10), 0)
        hs1.Add(e, 0)
        hs1.Add((10,10), 0)
        hs1.Add(f, 0)
        hs1.Add((10, 10), 1)
        hs1.Add(g, 0, wx.ALIGN_RIGHT)

        # stack the rows vertically
        vs = wx.BoxSizer(wx.VERTICAL)
        vs.Add(hs0, flag=wx.EXPAND)   # expand in the orthogonal direction to sizer (here horizontal)
        vs.Add(c, 1, flag=wx.EXPAND)  
        vs.Add(hs1, flag=wx.EXPAND)
        self.SetSizer(vs)

app = wx.PySimpleApp()
frame = MyFrame()
frame.Show(1)
app.MainLoop()

旧文本
旧文本
票数 0
EN

Stack Overflow用户

发布于 2019-07-10 18:08:20

首先,您需要一个垂直分级器将窗口分成3行:AB,C和DEFG:

代码语言:javascript
复制
frame_sizer = wx.BoxSizer(wx.VERTICAL)

接下来,您需要第一行的水平sizer:

代码语言:javascript
复制
first_sizer = wx.BoxSizer(wx.HORIZONTAL)
# add the items A and B to first_sizer
# now we add first_sizer to frame_sizer
frame_sizer.Add(first_sizer)

然后,对于第二行,我们只需将C控件添加到sizer:

代码语言:javascript
复制
frame_sizer.Add(C)

......确保以下内容:

  • 使用指定的大小创建控件(通过其构造函数)
  • 控件的最小尺寸(C.SetMinSize()

现在,对于最后一行,最好的选择是使用另一个水平分级器。

代码语言:javascript
复制
wx.BoxSizer(wx.HORIZONTAL)
# add DEF
# now add some space between them
wx.AddSizer(10)
# now add G

希望这适合你。如果没有,最好的办法是在Code :: Blocks中使用像wxSmith这样的GUI设计器(它是专为C ++设计的,但至少可以用来了解事物的外观 - wxPython应该有1到1 -1与wxWidgets的对应关系)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100009106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档