我已经看了几个小时的wx演示,只是不能把我的头围绕这个。我需要从数据库中提取信息,并将其列和值存储在网格中,仅用于查看(截至目前)有人能给我一个如何做它的示例脚本吗?这样我就可以用我自己的数据来实现它了。我需要的网格是固定位置的,可以放在一个面板(一个wx.笔记本的一页)里。我知道如何做这部分,但如何让网格进入面板并填充它让我感到困惑。其他信息:我的数据库保存客户信息(姓名、电话、电子邮件)
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数据库中的数据,您可以检查this和this用wx.grid.Grid填充单元格的方法是:
self.data
mygrid.SetCellValue(row, col, databasevalue4rowcol)
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]))
lrl1mhuk3#
我从这个页面找到了一个旧的最小的例子:https://web.archive.org/web/20210108064222/http://www.java2s.com/Tutorial/Python/0380__wxPython/extendswxgridPyGridTableBase.htm我在这里更新了它,因为PyGridTableBase和PySimpleApp()已经过时了,并添加了几个self.,这样它就不再抱怨了。
PyGridTableBase
PySimpleApp()
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一样,这样我们就可以快速发现示例的最低要求/作为第一种方法轻松地调整它们(而不必首先过滤高级演示示例的所有花里胡哨的东西)。然后,我们可以跳,看看所有的可能,如果延长到它的限制与完整的演示。
for dummies
minimal examples
3条答案
按热度按时间n9vozmp41#
如果您正在查看使用wx.grid.PyGridTableBase和相关的网格演示,您是对的:这看起来是一个非常神秘的代码。2然而,关键的方法是:
这个想法是如果你有你的数据
然后将数据放入相应的单元格中:
(
self.data
代表您的数据库)对于其他更简单的例子,使用wx.grid.Grid处理静态数据或MySQL数据库中的数据,您可以检查this和this
用wx.grid.Grid填充单元格的方法是:
e5nqia272#
**出于实际原因,我在上面的代码中使用print(...)
在真实的代码中代替print(...)使用以下代码:
lrl1mhuk3#
我从这个页面找到了一个旧的最小的例子:
https://web.archive.org/web/20210108064222/http://www.java2s.com/Tutorial/Python/0380__wxPython/extendswxgridPyGridTableBase.htm
我在这里更新了它,因为
PyGridTableBase
和PySimpleApp()
已经过时了,并添加了几个self.
,这样它就不再抱怨了。测试和运行于:
只是给负责维护演示的WxPython团队的一个提示。
对于新手来说,拥有一个
for dummies
第二个更简单的演示库可能是有利可图的,它包含所有当前的示例,但像上面的minimal examples
一样,这样我们就可以快速发现示例的最低要求/作为第一种方法轻松地调整它们(而不必首先过滤高级演示示例的所有花里胡哨的东西)。然后,我们可以跳,看看所有的可能,如果延长到它的限制与完整的演示。