wxPython GridSizer没有连接到面板上?

2024-10-03 06:18:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我正在开发的游戏创建一个关卡编辑器。它从一个平面文件中提取数据,然后基于逐字节的搜索,它将从预先设置的图块中组装一个网格。应用程序的这一部分我应该没有问题。问题是我的编辑器测试版本加载了一个从00到FF的16x16网格的测试块加载到了错误的位置。在

示例:应用程序框架如下所示:

|-T-------|
| |       |
| |       |
| |       |
| |       |
|---------|

除了我糟糕的ASCII艺术,这个框架实际上有一个水平尺寸,有两个垂直尺寸,一个左一右。每一个都有一个面板,每个面板都有一个第二个尺寸。左边的sizer有一个64像素宽的间隔区,然后是一个gridsizer,它稍后填充图像。右边的第二个sizer是用户可调整大小的,但至少有960个像素,然后是一个由代码中的级别宽度和高度决定的网格大小。在

基本上,对于每一边-有一个网格大小器在一个尺寸器内,它有一个间隔部分的宽度,它在一个面板上,在一个尺寸器里面,在主框架上的那一半尺寸。我希望这是有意义的,因为它有时会让我困惑:P

下面是实现所有这些的代码:

^{pr2}$

获取所有数据后,应用程序将使用它从指定的目录生成带有.png平铺的水平布局,但出于测试目的,我只是生成一个从00到FF的16x16网格,如上所述-通过一个菜单选项我称之为此方法:

def populateLevelGrid(self, id):
    #This debug method fills the level grid scrollbar with 256 example image tiles
    levelTileset = self.levelTilesetLookup[id]
    #levelWidth = self.levelWidthLookup[id]
    #levelHeight = self.levelHeightLookup[id]
    #levelTileTotal = levelWidth * levelHeight

    levelTileTotal = 256    #debug line

    self.imgPanelGrid = []
    for i in range(levelTileTotal):
        self.imgPanelGrid.append(ImgPanel.ImgPanel(self, False))
        self.rightPanelSizer.Add(self.imgPanelGrid[i]) 
        self.imgPanelGrid[i].set_image("tiles/"+ levelTileset + "/" + str(i) + ".png")
    self.rightPanelSizer.Layout() 
    self.rightPanelSizer.FitInside(self.rightPanel)

这是可行的,但将网格固定到整个框架的左上角,而不是框架的右半部分的左上角-它应该在上面。在左边的框架上也有类似的代码来处理1x256的网格,但是我无法判断这是否因为明显的原因而遭受同样的问题。两者都有可用的滚动条,但滚动时会出现重画问题,这让我怀疑它是否在整个应用程序上绘制图像,而忽略了应用程序的布局。在

我错过了什么吗?这是我第一次在python中使用gridsizer、images和gui做任何事情,直到最近才开始用python编写比VB6更跨平台的东西——有什么想法吗?=/


Tags: 数据代码self框架id应用程序网格面板
1条回答
网友
1楼 · 发布于 2024-10-03 06:18:40

这是大量的代码和大量的sizer!但我认为也许你的ImgPanels应该把右边的面板作为他们的父母,而不是自己。在

还有,你打过电话吗自调整器(自己的尺寸)?在任何地方都没看到。在

我建议在单独的函数中创建布局的一部分。那么您就不必担心您的本地命名空间被这些古怪的sizer名称污染。因此,对于sizer层次结构的每个部分,都可以有一个函数。在

create_controls
    create_left_panel
        create_grid
    create_right_panel

另外,我通常在子控件上使用SetMinSize,而不是在sizer中添加伪间隔来设置大小约束。那么Fit会帮你的。说到健康,我甚至不知道它会引起争论!在

相关问题 更多 >