Python tk 仿excel表格

使用tkintertable控件建立tkinter的表格——支持拖拽、编辑等功能。 源码原始链接:https://github.com/dmnfarrell/tkintertable 教程链接:https://github.com/dmnfarrell/tkintertable/wiki/Usage 这是一个简单的小例子: 安装tkintertable pip install tkintertable 简单使用: from tkintertable import TableCa... 阅读详情

Python tk 仿excel表格

一、介面。

二,源代码

源代码 0.py

import tkinter as tk
import tkinter.filedialog as fd
import os
import sqlite3
import csv
def creat_database():
    # 连接到数据库(如果不存在则会新建)
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()
    # 创建表格
    create_table_query = '''CREATE TABLE my_table (
                                            my_column_0 varchar(50),
                                            my_column_1 varchar(50),
                                            my_column_2 varchar(50),
                                            my_column_3 varchar(50),
                                            my_column_4 varchar(50),
                                            my_column_5 varchar(50),
                                            my_column_6 varchar(50),
                                            my_column_7 varchar(50),
                                            my_column_8 varchar(50),
                                            my_column_9 varchar(50),
                                            my_column_10 varchar(50),
                                            my_column_11 varchar(50),
                                            my_column_12 varchar(50),
                                            my_column_13 varchar(50),
                                            my_column_14 varchar(50),
                                            my_column_15 varchar(50),
                                            my_column_16 varchar(50)
                                            )'''
    cursor.execute(create_table_query)
    # 提交更改并关闭连接
    conn.commit()
    conn.close()
def insert_database(rows_num):
    # 连接到已有的数据库
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()
    # 执行插入语句
    insert_data_query = f'''INSERT INTO my_table (
                                                my_column_0 ,
                                                my_column_1 ,
                                                my_column_2 ,
                                                my_column_3 ,
                                                my_column_4 ,
                                                my_column_5 ,
                                                my_column_6 ,
                                                my_column_7 ,
                                                my_column_8 ,
                                                my_column_9 ,
                                                my_column_10 ,
                                                my_column_11 ,
                                                my_column_12 ,
                                                my_column_13 ,
                                                my_column_14 ,
                                                my_column_15 ,
                                                my_column_16 
                                                ) VALUES ('{rows_num}','','','','','','','','','','','','','','','','')'''
    cursor.execute(insert_data_query)
    # 提交更改并关闭连接
    conn.commit()
    conn.close()
def select_database(page):
    # 连接到已有的数据库
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()
    # 执行查询语句
    select_data_query = 'SELECT * FROM my_table LIMIT 0,2'
    cursor.execute(select_data_query)
    result = cursor.fetchall()
    # 执行查询语句
    select_data_query = f'SELECT * FROM my_table LIMIT {page*45+2},45'
    cursor.execute(select_data_query)
    result1 = cursor.fetchall()
    for row in result1:
        result.append(row)
    file_show(result)
    # 关闭连接
    conn.close()
def update_database(row):
    if(len(row)<17):
        for i in range(17-len(row)):
            row.append('')
    # 连接到已有的数据库
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()
    # 执行更新语句
    update_data_query = f'''UPDATE my_table SET 
                                        my_column_1 = '{row[1]}' ,
                                        my_column_2 = '{row[2]}' ,
                                        my_column_3 = '{row[3]}' ,
                                        my_column_4 = '{row[4]}' ,
                                        my_column_5 = '{row[5]}' ,
                                        my_column_6 = '{row[6]}' ,
                                        my_column_7 = '{row[7]}' ,
                                        my_column_8 = '{row[8]}' ,
                                        my_column_9 = '{row[9]}' ,
                                        my_column_10 = '{row[10]}' ,
                                        my_column_11 = '{row[11]}' ,
                                        my_column_12 = '{row[12]}' ,
                                        my_column_13 = '{row[13]}' ,
                                        my_column_14 = '{row[14]}' ,
                                        my_column_15 = '{row[15]}' ,
                                        my_column_16 = '{row[16]}'  
                                    WHERE 
                                        my_column_0 = '{row[0]}' '''
    cursor.execute(update_data_query)
    # 提交更改并关闭连接
    conn.commit()
    conn.close()

def on_scroll(*args):
    pos = scrollbar_v.get()
    print(pos)
    if args[0]=='scroll': 
        if args[2]=='units':
            first =  pos[0] + int(args[1])* 0.01
        elif args[2]=='pages':
            first =  pos[0]  + int(args[1])* 0.1
        else: 
            first = 0 
    elif args[0]=='moveto':        
        first = float(args[1])  
    else:        
        first = 0
    print(first)
    scrollbar_v.set(first,first + 0.1)

def file_new():
    for i in range(1,227):
        row=[]
        row.append(str(i))
        update_database(row)
    select_database(0)
    root.title('工作簿')

def file_show(str_table):
    for x in range(len(str_table)):
        for y in range(len(str_table[0])):
            table_column=table[x][y]
            table_column.delete(0,'end')  # 清空
            table_column.insert(0,str_table[x][y])#写入
            if(x==0):
                table_column.config(state='normal')
                table_column.delete(0,'end')  # 清空
                table_column.insert(0,str_table[x][y])#写入
                table_column.config(state='disabled')
            if(y==0):
                table_column.config(state='normal')
                table_column.delete(0,'end')  # 清空
                table_column.insert(0,str_table[x][y])#写入
                table_column.config(width=3)
                table_column.config(state='disabled')


fname=''
def file_open():
    global fname
    mydir='D:/'
    fname = fd.askopenfilename(title='选择文件',initialdir =mydir,filetypes=[("CSV file", "*.csv;*.CSV")])
    if(fname==''):
        return
    root.title(os.path.basename(fname))
    with open(fname, 'r', encoding="gbk",newline='') as file:
        reader=csv.reader(file)
        column0=1
        for row in reader:
            rows=[]
            rows.append(str(column0))
            for i in row:
                rows.append(i)
            update_database(rows)
            column0+=1
    select_database(0)

def file_save():
    str_table=[]
    for x in range(len(table)):
        str_table_columns=[]
        for y in range(len(table[0])):
            str_table_columns.append(table[x][y].get())
        str_table.append(str_table_columns)
    for row in str_table[1:]:
        update_database(row)    
    # 连接到已有的数据库
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()
    # 执行查询语句
    select_data_query = 'SELECT * FROM my_table'
    cursor.execute(select_data_query)
    result = cursor.fetchall()
    result1=[]
    for row in result:
        result1.append(row[1:])
    # 关闭连接
    conn.close()
    global fname
    if(fname==''):
        mydir='D:/'
        fname = fd.asksaveasfilename(title='另存为',initialdir =mydir,filetypes=[("CSV file", "*.csv;*.CSV")],defaultextension='.csv')
        if(fname==''):
            return
    with open(fname, 'w',encoding="gbk", newline='') as file:
        writer = csv.writer(file)
        writer.writerows(result1[1:])

def file_asave():
    global fname
    fname=''
    file_save()
    root.title(os.path.basename(fname))
    
def popup(event):
    right_menu.post(event.x_root, event.y_root)# post在指定的位置显示弹出菜单
    w=event.widget
    #print(w.get())
    right_menu.entryconfigure("剪切",command=lambda: w.event_generate("<<Cut>>"))
    right_menu.entryconfigure("复制",command=lambda: w.event_generate("<<Copy>>"))
    right_menu.entryconfigure("粘贴",command=lambda: w.event_generate("<<Paste>>"))

page=0
#鼠标滚动
def app_mousewheel(event):
    global page
    if event.delta==120:
        #上滚
        if(page!=0):
            page=page-1
            select_database(page)
    if event.delta==-120:
        #下滚
        if(page!=4):
            page=page+1
            select_database(page)

first_row=['0','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P']
def db_firing():
    global first_row
    file_path='example.db'
    if(os.path.exists(file_path)):
        if(os.stat(file_path).st_size==0):
            os.remove(file_path)
            creat_database()
            for i in range(227):
                insert_database(i)
            update_database(first_row)
    else:
        creat_database()
        for i in range(227):
            insert_database(i)
        update_database(first_row)

db_firing()

root = tk.Tk()
root.geometry(f'{root.winfo_screenwidth()}x{root.winfo_screenheight()}+0+0')

#创建菜单栏
m=tk.Menu(root)
#定义一个父菜单
file=tk.Menu(m,tearoff=False)
#将上面定义的父菜单命名为File,放在菜单栏中
m.add_cascade(label='文件', menu=file)
#在File中加入下拉菜单,并添加对应命令操作。
#如果点击这些选项, 就会触发相应的功能
file.add_command(label='新建',accelerator='Ctrl+N',command=file_new)
file.add_command(label='打开', accelerator='Ctrl+O',command=file_open)
file.add_command(label='保存', accelerator='Ctrl+S',command=file_save)
file.add_command(label='另存为', accelerator='Ctrl+Shift+S',command=file_asave)
#添加一条分割线
file.add_separator()
file.add_command(label='退出',command=root.quit,accelerator='Ctrl+Q')

edit= tk.Menu(m,tearoff=False)
m.add_cascade(label='编辑', menu=edit)
edit.add_command(label='剪切',accelerator='Ctrl+X')
edit.add_command(label='复制',accelerator='Ctrl+C')
edit.add_command(label='粘贴',accelerator='Ctrl+V')
 
#二级菜单
s= tk.Menu(file,tearoff=False)
file.add_cascade(label='导入', menu=s)
s.add_command(label="模块")
s.add_command(label="文本文件")

#三级菜单
z=tk.Menu(s,tearoff=False)
s.add_cascade(label='图片',menu=z)
z.add_command(label="gif")
z.add_command(label="jpg")
z.add_command(label="png")
z.add_command(label="bmp")
root.configure(menu=m)

'''创建一个弹出菜单'''
right_menu = tk.Menu(root,tearoff=False,)
right_menu.add_command(label="剪切")
right_menu.add_command(label="复制")
right_menu.add_command(label="粘贴")

table=[]
rows = 47
columns = 17
for x in range(rows):
    table_columns=[]
    for y in range(columns):
        table_column = tk.Entry(root, width=15, fg='blue', font=('Timew New Roman',13,'italic'))
        table_column.bind("<Button-3>", popup) 
        table_column.grid(row=x, column=y)
        table_column.insert(0,'')#写入
        if(x==0):
            table_column.delete(0,'end')  # 清空
            table_column.insert(0,first_row[y])#写入
            table_column.config(state='disabled')
        if(y==0):
            table_column.delete(0,'end')  # 清空
            table_column.insert(0,x)#写入
            table_column.config(width=3)
            table_column.config(state='disabled')
        if y in (3,4,10,11,12):
            table_column.config(width=7)
        table_columns.append(table_column)
    table.append(table_columns)
print(len(table))
print(len(table[0]))
'''
tk.Button(root,width=14, fg='red', font=('Timew New Roman',13,'italic'),text='↑').grid(row=rows,column=0)
tk.Button(root,width=14, fg='red', font=('Timew New Roman',13,'italic'),text='↓').grid(row=rows,column=1)
tk.Button(root,width=14, fg='red', font=('Timew New Roman',13,'italic'),text='←').grid(row=rows,column=2)
tk.Button(root,width=14, fg='red', font=('Timew New Roman',13,'italic'),text='→').grid(row=rows,column=3)
tk.Button(root,command=file_new,width=14, fg='red', font=('Timew New Roman',13,'italic'),text='新建').grid(row=rows,column=14)
tk.Button(root,command=file_open,width=14, fg='red', font=('Timew New Roman',13,'italic'),text='打开').grid(row=rows,column=15)
tk.Button(root,command=file_save,width=14, fg='red', font=('Timew New Roman',13,'italic'),text='保存').grid(row=rows,column=16)             
'''
scrollbar_v = tk.Scrollbar(root,orient=tk.VERTICAL)
scrollbar_v.grid(row=0, column=columns,rowspan=rows,sticky='nesw')
scrollbar_v.config(command=on_scroll)

root.bind("<MouseWheel>", app_mousewheel)
#root.after(1000,file_new)
root.mainloop()

tkinter动态表格 - 实时更新数据(TkinterTable) tkinter动态表格 - 实时更新数据(TkinterTable) 参考 [TkinterTable] Tkinter上的表格GUI】 https://github.com/dmnfarrell/tkintertable/wiki/Usage https://github.com/dmnfarrell/tkintertable/issues/47 python使用tkinter编写一个数据显示窗口(实时显示更新的数据) 首先安装TkinterTable,即pip install tki 阅读详情

相关推荐

python tkinter tkintertable

python tkinter tkintertable Excel数据显示到GUI上 本文适用于tkinterGUI显示Excel数据 python Excel数据显示python tkinter tkintertable Excel数据显示到GUI上前言一、创建GUI界面二、使用步骤1.引入库三、效果图总结 前言 本文主要使用是将Excel数据显示到python tkinter GUI 界面上进行展示,主要使用的方法为pandas DataFrame对Excel数据进行处理,再使用tkinterta

qq_25661221的博客 6359

用python的tkinter模块实现表格功能

python的tkinter模块是没有表格组件的,那么怎样用它实现表格功能呢,下面是一些探索。我们可以用Entry或Text类使用重复语句来实现。

wcj781201的专栏 4720

python实现多个excel匹配到一个表格2.0

python实现多个excel匹配到一个表格2.0版本(图文,更新)

YBY0010的博客 991

tkinter库使用表格(列表)控件

本文将介绍如何在tkinter库中使用表格(列表)控件。

2401_83095409的博客 5121

使用python将图像复刻到excel表格

然后想到图像可以分割成一个个小块,excel表格也是一个个小格子,将小块的坐标和颜色对应填充到表格中,不就行了。上班摸鱼的时候突然想到以前有个日本老爷爷用excel表格作画感觉挺牛的,

q1424966670的博客 668

python tkinter tkintertable(csdn)————程序.pdf

python tkinter tkintertable(csdn)————程序

python tkinter库使用表格控件

本文介绍如何在tkinter库中使用表格控件。

2401_83095409的博客 6210

Tkinter Table:现在托管在Google代码上。-开源

提供基本表功能的tkinter类。 扩展基类供您自己使用。

【python】将word文档内容转换为excel表格

在日常工作中,我们经常需要将Word文档中的内容提取并转换为Excel表格,以便进行数据分析和处理。本文将介绍如何使用Python编写一个简单的程序,将Word文档中的内容转换为Excel表格。

师兄怎么办 2381

【机械臂算法】机械臂动力学参数辨识仿真

本文以puma560m机械臂为例子进行动力学参数辨识的讲解,puma560m可以在robotic toolbox中找到,这里以它真实机械臂对他的动力学参数进行辨识。此外这里还有要说的是,机械臂参数辨识其实是一个系统工程,其中和系统的机械、电子、嵌入式都有着很深的联系,并不是仿真这么简单的。

vrijheid的博客 7836

【SystemVerilog项目实践】4.AHB-SRAMC(验证计划)

验证计划

托马斯的博客 3661

python数据分析,用python对excel表格操作

用python轻松操作excel表格 项目场景: 提示:通常我们对excel表格进行删除多个项的时候,如果一条一条的删除就会花费很多时间,并且也不知道要删除的部分是否删除完,进行查询,分类的时候用python语言几条语句就能简单的完成要求。 例如:从一个有很多条学生信息的excel表中按要求进行操作 问题描述: 提示:首先在软件中导入excel表格 APP 中接收数据代码: from pandas import Series,DataFrame import pandas as pd import nu

sunlight_meng的博客 4562

Qt (高仿Visio)流程图组件开发(一) 效果展示及基本开发框架构思

最近因为工作原因需要使用Qt开发一个类似于Visio的流程图组件,需满足基本的流程图功能,图元类型可自定义扩展,不同图元存有各类自定义数据,可以保存为xml文件,可以读取xml文件生成流程图等等。

qq_43793182的博客 1万+

python:xlrd 读取 Excel文件,显示在 tkinterTable 表格中

python xlrd 读取 Excel xlsx 文件,显示在 tkinterTable 表格中

belldeep的专栏 1355

FPGA实现16x16点阵汉字滚动显示:Verilog代码与Quartus仿真详解

本文详细介绍了如何使用FPGA实现16x16点阵汉字滚动显示,包括Verilog代码设计、Quartus仿真及硬件连接技巧。通过字模数据存储和扫描控制逻辑,实现汉字的动态显示效果,并提供了优化建议和常见问题解决方案,适合FPGA开发者和硬件爱好者学习参考。

weixin_29172963的博客 354

基于YOLOv8的多类别检测模型融合实战:从数据集重构到模型训练

本文详细介绍了如何将多个单一类别的YOLOv8检测模型融合为一个高效的多类别检测模型。通过重构数据集、利用预训练模型生成新标签,并重新训练,解决了多模型并行带来的速度慢、资源占用高和部署复杂等问题。实战流程涵盖数据准备、标签生成、模型训练与评估,旨在帮助开发者构建性能优异的YOLOv8多类别检测模型。

kmeans3miner的博客 228

python调用(百度云、腾讯云)API接口表格识别并保存为excel

图像识别具有较高的商业价值,本节主要通过python调用(百度云、腾讯云)API接口表格识别并保存为excel分析表格识别的能力

用余生去守护的博客 4937

AXI4协议之AXI4-Lite接口详解及实战

本文首先对AXI4总线协议进行了一个简单的介绍,然后使用vivado提供的模板创建了一个AXI4-Lite Master的接口,并生成了一个具有Master和Slave的代码实例,阅读该示例代码,进行修改后用于自己的项目。

高阶近似的博客 2万+

使用python操作excel表格

操作两个表格数据,生成一个表格。使用python 的 xlrd库来实现读取excel数据, 使用 xlwt 来生成excel 表格, 使用tkinter库 实现 GUI 一、读取excel数据 1.xlwt用法说明 xlwt 是 读取、格式化excel表格信息的一个库,xls,xlsx 文件都支持。 xlrd.open_workbook(filename=None) #打开电子表格文件以...

fishycx的专栏 855

.NET MAUI 第13讲 深入探索 .NET MAUI Essentials:让应用感知设备与环境,打造智能体验

摘要:本文介绍了.NET MAUI Essentials库如何赋能移动应用感知设备环境的能力。文章详细讲解了设备信息获取(DeviceInfo)、网络状态监测(Connectivity)、地理位置服务(Geolocation)、地图集成(Map)以及传感器(Accelerometer等)等核心功能的使用方法,并提供了完整的代码示例。通过一个综合练习,展示了如何构建设备信息仪表板,实时显示设备参数和网络状态,并实现位置获取与地图导航功能。这些跨平台API能显著提升应用智能化和用户体验,同时保持代码简洁高效。

AlphaNil的博客 1088

使用IGV软件可视化染色质可及性

染色质可及性(chromatin accessibility)是指DNA序列在植物细胞核中的可访问程度。染色质是由DNA和蛋白质组成的复杂结构,它紧密地包裹在细胞核中,并影响基因的表达和功能。染色质可及性研究着重于理解染色质是否容易被转录因子和其他调控蛋白访问,从而影响基因的表达。文献中,常常会有下面这种图片来表示基因组上的一些区域或基因的染色质开放性强弱。一般情况下,我们可以使用IGV软件或GSA-man软件进行可视化,两者的操作相似。这里,以IGV软件为例,演示如何对染色质可及性进行可视化。

沉香best的博客 3724

python 读取excel表数据获取坐标_python 读取excel表格数据基础篇

废话不多说,直接开始干活!安装相应库pip install xlrd需要数据直接上代码# coding=utf-8from tkinter import filedialogimport tkinter.messageboximport xlrdfrom tkinter.ttk import Labelfrom tkinter import *import urllib3urllib3.disab...

weixin_39611930的博客 1836

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Python3 编写处理Excel表格数据筛选脚本用到的一些方法

记录下之前用python3 写的一个处理Excel表格数据脚本用到的一些方法。 本文内容比较杂,可按需跳转翻看。

AZerork的博客 4064

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

用Python 处理EXCEL表格数据

使用python处理Excel数据时使用到的公共方法

zhangzhibinshuai的博客 1300

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【Python】Tkinter + Pandas实现窗口表格显示

本文使用PyCharm作为Python脚本开发环境,打开PyCharm,选择新建项目,输入项目名并选择项目存放地址。文件并应用,我们会发现,我们之前安装的库也出现在软件包一栏中,代表我们现在已经配置好我们所需的库。加入表格刷新函数,使得当我们修改源表格文件时该窗口显示的表格内容也会有相应变化。在窗口内新建一个表格部分,并取出data中的数据,初始化表格以及设置表格列宽。创建一个窗口,并将其命名为“excel”,并设置窗口位置以及大小。,我们可以看到,其中的软件包中只有一个pip。选择你python中的。

lin_xi15的博客 2616

Python实现excel表格合并

使用Python实现excel表格合并: 一个excel文件的多sheet合并 文件夹下多个Excel文件的合并(单个文件的多sheet也会自动合并) 源码(仅供参考,个需自行修改): import tkinter as tk from tkinter import filedialog from datetime import datetime import pandas as pd import os, calendar, time, copy, openpyxl, sys, logging..

weixin_46046193的博客 1214
上一篇: python 简易摸鱼小说阅读器
下一篇: Python练手项目:PDF小工具-fitz版
小6哥
博客等级 码龄18年 16粉丝 17原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值