You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何循环布局wxPython控件?SQLite数据展示问题求助

问题修复方案

1. 修正控件位置颠倒问题

你的main_sizer如果未指定垂直方向,默认会采用水平布局,导致三个子sizer并排而非上下堆叠。初始化main_sizer时必须明确设置垂直方向:

self.main_sizer = wx.BoxSizer(wx.VERTICAL)

这样三个子sizer会严格按照你Add的顺序从上到下排列,解决最后一个sizer跑到顶部的问题。

2. 显示全部数据库行数据

当前代码仅处理了单行数据,且未按行组织布局。正确的做法是为每行数据单独创建水平sizer,再统一加到垂直方向的结果容器中:

步骤1:初始化结果容器为垂直sizer

self.search_result_box_sizer = wx.BoxSizer(wx.VERTICAL)

步骤2:遍历所有数据库行并添加控件

假设db_results是从SQLite查询返回的所有行数据(每行包含student_name, student_class, amount_paid):

for student_name, student_class, amount_paid in db_results:
    # 为当前行创建水平布局容器
    row_sizer = wx.BoxSizer(wx.HORIZONTAL)
    # 添加当前行的三个文本控件
    row_sizer.Add(
        wx.StaticText(self, label=f"{student_name} "),
        1, wx.ALL | wx.EXPAND, 5
    )
    row_sizer.Add(
        wx.StaticText(self, label=f"{student_class} "),
        1, wx.ALL | wx.EXPAND, 5
    )
    row_sizer.Add(
        wx.StaticText(self, label=f"{amount_paid} "),
        1, wx.ALL | wx.EXPAND, 5
    )
    # 将当前行的布局容器添加到结果容器
    self.search_result_box_sizer.Add(row_sizer, 0, wx.ALL | wx.EXPAND, 5)

最后确保布局生效

完成所有sizer添加后,需要绑定主sizer到窗口并刷新布局:

self.SetSizer(self.main_sizer)
self.Layout()
# 可选:让窗口自动适配内容大小
# self.Fit()

内容的提问来源于stack exchange,提问作者Z.Edibo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 07:46:24