sqlite 如何使用数据库中的数据构造和填充wx.Grid(python/wxpython)

vuv7lop3  于 2022-12-13  发布在  SQLite
关注(0)|答案(3)|浏览(179)

我已经看了几个小时的wx演示,只是不能把我的头围绕这个。
我需要从数据库中提取信息,并将其列和值存储在网格中,仅用于查看(截至目前)
有人能给我一个如何做它的示例脚本吗?这样我就可以用我自己的数据来实现它了。我需要的网格是固定位置的,可以放在一个面板(一个wx.笔记本的一页)里。我知道如何做这部分,但如何让网格进入面板并填充它让我感到困惑。
其他信息:我的数据库保存客户信息(姓名、电话、电子邮件)

n9vozmp4

n9vozmp41#

如果您正在查看使用wx.grid.PyGridTableBase和相关的网格演示,您是对的:这看起来是一个非常神秘的代码。2然而,关键的方法是:

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)
e5nqia27

e5nqia272#

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]))
lrl1mhuk

lrl1mhuk3#

我从这个页面找到了一个旧的最小的例子:
https://web.archive.org/web/20210108064222/http://www.java2s.com/Tutorial/Python/0380__wxPython/extendswxgridPyGridTableBase.htm
我在这里更新了它,因为PyGridTableBasePySimpleApp()已经过时了,并添加了几个self.,这样它就不再抱怨了。

import wx
import wx.grid

class GenericTable(wx.grid.GridTableBase):
    def __init__(self, data, rowLabels=None, colLabels=None):
        wx.grid.GridTableBase.__init__(self)
        self.data = data
        self.rowLabels = rowLabels
        self.colLabels = colLabels

    def GetNumberRows(self):
        return len(self.data)

    def GetNumberCols(self):
        return len(self.data[0])

    def GetColLabelValue(self, col):
        if self.colLabels:
            return self.colLabels[col]

    def GetRowLabelValue(self, row):
        if self.rowLabels:
            return self.rowLabels[row]

    def IsEmptyCell(self, row, col):
        return False

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

    def SetValue(self, row, col, value):
        pass

data = (("A", "B"), ("C", "D"), ("E", "F"), ("G", "G"), ("F", "F"), ("Q", "Q"))

colLabels = ("Last", "First")
rowLabels = ("1", "2", "3", "4", "5", "6", "7", "8", "9")

class SimpleGrid(wx.grid.Grid):
    def __init__(self, parent):
        wx.grid.Grid.__init__(self, parent, -1)
        self.tableBase = GenericTable(data, rowLabels, colLabels)
        self.SetTable(self.tableBase)

class TestFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, -1, "A Grid", size=(275, 275))
        self.grid = SimpleGrid(self)

app = wx.App()
frame = TestFrame(None)
frame.Show(True)
app.MainLoop()

测试和运行于:

Python 3.9.12
wx.version: 4.2.1a1
wxWidgets 3.2.1

只是给负责维护演示的WxPython团队的一个提示。
对于新手来说,拥有一个for dummies第二个更简单的演示库可能是有利可图的,它包含所有当前的示例,但像上面的minimal examples一样,这样我们就可以快速发现示例的最低要求/作为第一种方法轻松地调整它们(而不必首先过滤高级演示示例的所有花里胡哨的东西)。
然后,我们可以跳,看看所有的可能,如果延长到它的限制与完整的演示。

相关问题