wxpython:wx.grid 表格显示 Excel xlsx文件

pip install xlrd
xlrd-1.2.0-py2.py3-none-any.whl (103 kB)
摘要: Library for developers to extract data from Microsoft Excel (tm) spreadsheet files

pip install wxpython==4.2
wxPython-4.2.0-cp37-cp37m-win_amd64.whl (18.0 MB)
摘要: Cross platform GUI toolkit for Python, "Phoenix" version

编写 wx_grid_xlsx.py 如下

# -*- coding: utf-8 -*-
""" wx.grid 表格显示 Excel xlsx文件 """
import os
import sys
import datetime
import xlrd
import wx  
import wx.grid  
  
class MyFrame(wx.Frame):
 
    def __init__(self):  
        super().__init__(parent=None, title='wx.grid view xlsx ', size=(1000,600))
        panel = wx.Panel(self)  

        # 选择.xlsx文件名
        fileFilter = "xlsx Files (*.xlsx)|*.xlsx|" "Excel files (*.xls)|*.xls"
        fileDialog = wx.FileDialog(self, message="选择xlsx文件", wildcard=fileFilter, style=wx.FD_OPEN)
        dialogResult = fileDialog.ShowModal()
        if dialogResult != wx.ID_OK:
            return
        filename = fileDialog.GetPath()
        if not os.path.exists(filename):
            print(f'Error: {filename} not found.')
            sys.exit(2)

        # Read Excel file
        book = xlrd.open_workbook(filename)
        sheetname = "Sheet1"
        sheet = book.sheet_by_name(sheetname)

        nrows = sheet.nrows  # 获取sheet中的有效行数
        if nrows > 10000:
            print(f" 行数: {nrows} > 10000 !")
            nrows = 10000
        ncols = sheet.ncols  # 获取sheet中的有效列数
        if ncols > 26:
            print(f" columns: {ncols} > 26 !")
            ncols = 26
        
        # 创建一个表格  
        self.grid = wx.grid.Grid(panel)  
        self.grid.CreateGrid(nrows, ncols)  # 创建一个 nrows行 ncols列的表格  
  
        # 设置表格的列标题
        cols = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        for j in range(0, ncols):
            self.grid.SetColLabelValue(j, cols[j])   
  
        # 设置表格的行标题
        for i in range(0, nrows):
            self.grid.SetRowLabelValue(i, str(i+1))  

        #单元类型cell_type: 0.empty, 1.string, 2.number, 3.date, 4.boolean, 5.error, 6.blank
        # 向表格中添加数据
        for i in range(0, nrows):
            for j in range(0, ncols):
                v = sheet.cell_value(i,j)
                t = sheet.cell_type(i,j)
                if t ==0:
                    self.grid.SetCellValue(i,j, '')
                elif t ==1:
                    self.grid.SetCellValue(i,j, v)
                elif t ==2:
                    if v%1 ==0: # int
                        self.grid.SetCellValue(i,j, "%d" %v)
                    else: # float
                        self.grid.SetCellValue(i,j, "%.4f" %v)
                elif t ==3: # date
                    date_tuple = xlrd.xldate_as_tuple(v, book.datemode)
                    date_v = datetime.date(*date_tuple[:3])
                    self.grid.SetCellValue(i,j, date_v.strftime('%Y-%m-%d'))
                else:
                    self.grid.SetCellValue(i,j, str(v))  
  
        # 使用 sizer 来管理布局  
        sizer = wx.BoxSizer(wx.VERTICAL)  
        sizer.Add(self.grid, 1, wx.EXPAND | wx.ALL, 5)  
        panel.SetSizer(sizer)  


if __name__ == '__main__':  
    app = wx.App(False)  
    frame = MyFrame()
    frame.Show(True)    
    app.MainLoop()

运行 python wx_grid_xlsx.py

参考了百度:文心一言:示例 wx_grid_demo.py

import wx  
import wx.grid  
  
class MyFrame(wx.Frame):  
    def __init__(self):  
        super().__init__(parent=None, title='Grid Example')  
        panel = wx.Panel(self)  
  
        # 创建一个表格  
        self.grid = wx.grid.Grid(panel)  
        self.grid.CreateGrid(5, 3)  # 创建一个 5 行 3 列的表格  
  
        # 设置表格的列标题  
        self.grid.SetColLabelValue(0, "Column A")  
        self.grid.SetColLabelValue(1, "Column B")  
        self.grid.SetColLabelValue(2, "Column C")  
  
        # 设置表格的行标题  
        self.grid.SetRowLabelValue(0, "Row 1")  
        self.grid.SetRowLabelValue(1, "Row 2")  
        self.grid.SetRowLabelValue(2, "Row 3")  
  
        # 向表格中添加数据  
        self.grid.SetCellValue(0, 0, "Data 1-1")  
        self.grid.SetCellValue(0, 1, "Data 1-2")  
        self.grid.SetCellValue(0, 2, "Data 1-3")  
        self.grid.SetCellValue(1, 0, "Data 2-1")  
        self.grid.SetCellValue(1, 1, "Data 2-2")  
        self.grid.SetCellValue(1, 2, "Data 2-3")  
  
        # 使用 sizer 来管理布局  
        sizer = wx.BoxSizer(wx.VERTICAL)  
        sizer.Add(self.grid, 1, wx.EXPAND | wx.ALL, 5)  
        panel.SetSizer(sizer)  


if __name__ == '__main__':  
    app = wx.App()  
    frame = MyFrame()
    frame.Show()    
    app.MainLoop()

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
wxPython 是一个流行的 Python 图形用户界面 (GUI) 库,它可以让开发者轻松地创建丰富的窗口应用程序。而 wx.lib.plot 是 wxPython 中提供的一个库,用于在窗口应用程序中绘制图表。 在显示数据标签方面,wx.lib.plot 提供了一个函数叫做 drawValueLabels(),它可以用来在绘制的图表上显示数据标签。 要使用 drawValueLabels() 函数,首先需要创建一个 PlotCanvas 对象,并将绘制的图表添加到该对象中。然后,可以使用该对象的 drawValueLabels() 方法来显示数据标签。 该函数的调用方式如下: ```python plotCanvas.drawValueLabels(labels, labelFont=None, direction='horizontal', reverse=False) ``` 其中,labels 参数是要显示的数据标签,它是一个字典,其中键为数据点的索引,值为对应的标签文本。labelFont 参数用于设置标签的字体,direction 参数用于设置标签的显示方向,可以是 'horizontal'(水平显示)或 'vertical'(垂直显示),reverse 参数用于控制标签的显示顺序。 示例代码如下: ```python import wx import wx.lib.plot as plot app = wx.App() frame = wx.Frame(None, -1, "Plot Example", size=(600, 400)) panel = wx.Panel(frame) # 创建 plot canvas plotCanvas = plot.PlotCanvas(panel) # 创建数据 x = [0, 1, 2, 3, 4] y = [3, 5, 8, 4, 6] # 绘制图表 plotCanvas.DrawBarChart(data=[list(zip(x, y))], xLabel="X", yLabel="Y") # 添加数据标签 labels = {0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E'} plotCanvas.drawValueLabels(labels) panel.Layout() frame.Show() app.MainLoop() ``` 以上示例代码首先创建了一个窗口应用程序,然后在窗口中创建了一个 plot canvas,并绘制了一个条形图。接着,创建了一个标签字典,并调用 drawValueLabels() 函数显示数据标签。最后,显示应用程序并进入主事件循环。 通过以上步骤,我们可以在使用 wxPythonwx.lib.plot 绘制的图表上显示数据标签。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值