【问题标题】:How do I construct and populate a wx.Grid with data from a database (python/wxpython)如何使用数据库中的数据构建和填充 wx.Grid (python/wxpython)
【发布时间】:2012-06-25 16:22:12
【问题描述】:

我已经看了好几个小时的 wx 演示了,但我无法理解这一点。

我需要从我的数据库中提取信息并将其列和值存储在网格中,仅供查看(截至目前)

谁能给我一个示例脚本来说明如何做到这一点,这样我就可以用我自己的数据来实现它。我需要的网格是固定位置的,可以放在面板(wx.notebook 的一页)内。我知道如何做这部分,但如何在面板内获取网格并填充它让我感到困惑。

附加信息:我的数据库包含客户信息(姓名、电话、电子邮件)

【问题讨论】:

  • 只是为了澄清我不是在要求别人为我做我的工作,但我似乎真的无法理解演示在做什么。 (网格总是让我感到困惑)
  • 我建议你看看Dabo,这是一个主要用于编写与数据库交互的 wxPython GUI 的框架。
  • +1 你说得对,那个演示真的很神秘。无法理解自己(我对 wx 有一些经验......)

标签: python sqlite grid wxpython


【解决方案1】:

如果您正在查看使用 wx.grid.PyGridTableBase 和相关的网格演示,那么您是对的:这似乎是一个非常神秘的代码。 但是,关键的方法是:

def GetValue(self, row, col):
        return 'something'

这个想法是,如果你有你的数据

self.data = [[1,2,3,4],
             [5,6,7,8],
             ........
             ] 

然后这会将您的数据放在相应的单元格中:

def GetValue(self, row, col):
     return str( self.data[row][column] )

self.data 代表你的数据库)

对于使用 wx.grid.Grid 静态数据或 MySQL 数据库数据的其他更简单的示例,您可以查看thisthis

使用 wx.grid.Grid 填充单元格的方法是:

mygrid.SetCellValue(row, col, databasevalue4rowcol)

【讨论】:

  • 我必须诚实。这让我更加困惑。您是否可以编写一个 sn-p 代码,就好像您要将它添加到您的应用程序一样。我只需要看看其他人会如何处理这个过程。
  • @lsov5 您正在查看的演示究竟是什么?看看编辑
  • @isov5 我假设,究竟是哪个演示程序?
  • @joaquin 感谢您为回答这个问题所做的努力。我已经在您的答案中看到了这些链接,但我发现它们非常原始。我自己是 wxGrid 的新手,我想到了你的方法。但是没有比这更方便的吗?即使在非常古老的 VB6 中,我们也只有 2 或 3 行将数据引入网格。如果我们今天在 wxWidgets 这样新的东西上没有这样的东西,那真是令人遗憾。不管怎么说,还是要谢谢你。顺便说一句,我使用的是 C++ 而不是 Python。
  • @itsols 您可以在循环中使用 SetCellValue 将数据放入网格 p.e 中,从 p.e 中获取行和值。对(行,值)的列表或您使用从数据库中读取的数据创建的任何可迭代项。这需要 3 行。
【解决方案2】:
import itertools as it
import pandas as pd

df = pd.DataFrame({'A': [1.1, 2.7, 5.3], 'B': [2, 10, 9], 'C': [3.3, 5.4, 1.5], 'D': [4, 7, 15]},
                      index = ['a1', 'a2', 'a3'])

for row, col in it.product(range(len(df)), range(len(df.columns))):
    print ("mygrid.SetCellValue({0}, {1}, {2})".format(row, col, df.iat[row, col])) # **

# Results : 
# mygrid.SetCellValue(0, 0, 1.1)
# mygrid.SetCellValue(0, 1, 2)
# ...
# mygrid.SetCellValue(2, 3, 15)

** 出于实际原因,我在上面的代码中使用了 print(...)

在实际代码中,而不是 print(...) 使用以下代码:

mygrid.SetCellValue(row, col, str(df.iat[row, col]))

【讨论】:

    猜你喜欢
    • 2020-07-04
    • 1970-01-01
    • 2017-10-24
    • 2023-03-08
    • 2015-01-27
    • 2020-05-20
    • 2012-07-16
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多