【问题标题】:Remove index from Label entry从标签条目中删除索引
【发布时间】:2020-06-09 15:21:32
【问题描述】:

代码获取用户输入的星期,在 excel 文件中搜索包含该星期的行,将结果写入不同的 excel 文件,然后在 tkinter 标签上写入列。问题是在 GUI(标签)上显示索引值。如何从 GUI(标签)中隐藏/删除此索引值

import tkinter as tk
from datetime import date, datetime
from tkinter import *
from tkinter import font
from warnings import simplefilter
import openpyxl
import pandas as pd
from openpyxl import Workbook
from openpyxl.styles import Alignment
import xlrd
from pandas import ExcelWriter

simplefilter("ignore")
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np


wb = openpyxl.load_workbook('excel.xlsx')
sheet = wb["Productie"]
week_number = date.today().isocalendar()[1]

root = tk.Tk()
root.title("Main Menu")
root.geometry("1000x500")
fontmare = font.Font(family='Helvetica', size=14, weight='bold')
var = tk.StringVar()
def exportexcel():
    wb_sales = pd.ExcelFile("excel.xlsx")
    sheet_3 = pd.read_excel("excel.xlsx", sheet_name= 2,dtype=str)
    pd.set_option('display.max_rows', 500)
    pd.set_option('display.max_columns', 500)
    pd.set_option('display.width', 500)
    read_sheets_name = wb_sales.sheet_names
    weekenter = var.get()
    print(weekenter)
    print(sheet_3.query("['6'] in Week"))
    global sheetweek
    if weekenter == "6":
        #sheetweek.set(sheet_3.query("['6'] in Week"))
        writer = ExcelWriter('weekexport.xlsx')
        sheet_3.query("['6'] in Week").to_excel(writer, 'Foaie1',index=False,)
        writer.save()
        print(sheet_3.query("['6'] in Week"))
    if weekenter == "7":
        #sheetweek.set(sheet_3.query("['7'] in Week"))
        writer = ExcelWriter('weekexport.xlsx')
        sheet_3.query("['7'] in Week").to_excel(writer, 'Foaie1',index=False,)
        writer.save()
        print(sheet_3.query("['7'] in Week"))

    #####################################################################################################
    global dfM
    global dfB
    global dfQ
    global dfSN1
    global dfSN2
    dfM.set(pd.read_excel('weekexport.xlsx', sheet_name='Foaie1', header=None,  usecols="D",index_col=None))
    dfB.set(pd.read_excel('weekexport.xlsx', sheet_name='Foaie1', header=None, usecols="E",index_col=None))

    dfQ.set(pd.read_excel('weekexport.xlsx', sheet_name='Foaie1', header=None, usecols="F",index_col=None))

    dfSN1.set(pd.read_excel('weekexport.xlsx', sheet_name='Foaie1', header=None, usecols="G",index_col=None))

    dfSN2.set(pd.read_excel('weekexport.xlsx', sheet_name='Foaie1', header=None, usecols="H",index_col=None))








    root.mainloop()



def write_to_xlsx():
    wb = openpyxl.load_workbook('excel.xlsx')
    sheet = wb["Productie"]
    week_number = date.today().isocalendar()[1]
    ws = wb.active
    maxim = ws.max_row + 1

    for i in range(8):
        ws.merge_cells(start_row=maxim, start_column=i+1, end_row=maxim + 1, end_column=i+1)  # A

    ws.merge_cells(start_row=maxim, start_column=24, end_row=maxim + 1, end_column=24)  # X
    ws.merge_cells(start_row=maxim, start_column=25, end_row=maxim + 1, end_column=25)  # Y
    week_number = date.today().isocalendar()[1]
    ws.cell(column=1, row=maxim, value=week_number)

    now = datetime.now()
    dt_string = now.strftime('%d/%m')
    ws.cell(column=2, row=maxim, value=dt_string)

    for ndex, entry in enumerate(entry_list):
        ws.cell(column=ndex+3, row=maxim, value=entry_list[ndex].get())
        entry_list[ndex].delete(0, 'end')

    rows = range(1, maxim + 1)
    columns = range(1, 8)
    for row in rows:
        for col in columns:
            sheet.cell(row, col).alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)

    wb.save("excel.xlsx")


label_list = ['Model', 'Etapa', 'Batch', 'Cantitate', 'S/N']
entry_list = []

for i in range(len(label_list)):
    tk.Label(root, text=label_list[i]).grid(row=i, column=0, sticky='w')
    entry_list.append(tk.Entry(root, width=10))
    entry_list[-1].grid(row=i, column=1, sticky='w',)
dfM = StringVar()
dfB = StringVar()
dfQ = StringVar()
dfSN1 = StringVar()
dfSN2 = StringVar()
dfM.set("Model")
dfB.set("Batch")
dfQ.set("Cantitate")
dfSN1.set("Serial")
dfSN2.set("Number")
tk.Button(root, text='Submit', command=write_to_xlsx).grid(row=2, column=2, sticky='W')
tk.Button(root, text='Week:', command=exportexcel).grid(row=6, column=0, sticky='W')
entry = tk.Entry(root, textvariable=var, width=10).grid(row=7, column=0, sticky='w')
LabelModel = tk.Label(root, textvariable=dfM, font=fontmare).grid(row=8, column=0,sticky="w")
LabelBatch = tk.Label(root, textvariable=dfB, font=fontmare).grid(row=8, column=1,sticky="w")
LabelQty = tk.Label(root, textvariable=dfQ, font=fontmare).grid(row=8, column=2,sticky="w")
LabelSerial = tk.Label(root, textvariable=dfSN1, font=fontmare).grid(row=8, column=3,sticky="w")
LabelNumber = tk.Label(root, textvariable=dfSN2, font=fontmare).grid(row=8, column=4,sticky="w")



root.mainloop()

【问题讨论】:

  • 我已经看到了一个主要问题。你有 2 个主循环。您只需要一个 Tk() 和一个 mainloop() 实例。
  • 是的,刚刚发现它,它是从代码的前一部分中删除的。谢谢
  • 您有我们可以使用的示例数据集吗?由于我的测试 excel 中不存在 week 数据,我很难进行测试。
  • 这是提取数据的主文件(放在程序所在的文件夹中),代码将在同一文件夹中创建另一个。

标签: python excel pandas tkinter


【解决方案1】:

我有很多想做的事,但今天没时间了。

根据this postindex_col=None 似乎有关于此问题的错误报告。

相关错误报告:GH18792GH20480

我为解决这个问题所做的是将数据转换为字符串,然后将其分解为其组件。一旦我有了这些,我就可以再次对其运行 split() 以摆脱索引。

现在这是您正在寻找的解决方法:

替换:

global dfM
    global dfB
    global dfQ
    global dfSN1
    global dfSN2
    dfM.set(pd.read_excel('weekexport.xlsx', sheet_name='Foaie1', header=None,  usecols="D",index_col=None))
    dfB.set(pd.read_excel('weekexport.xlsx', sheet_name='Foaie1', header=None, usecols="E",index_col=None))
    dfQ.set(pd.read_excel('weekexport.xlsx', sheet_name='Foaie1', header=None, usecols="F",index_col=None))
    dfSN1.set(pd.read_excel('weekexport.xlsx', sheet_name='Foaie1', header=None, usecols="G",index_col=None))
    dfSN2.set(pd.read_excel('weekexport.xlsx', sheet_name='Foaie1', header=None, usecols="H",index_col=None))

与:

var_lst = [dfM, dfB, dfQ, dfSN1, dfSN2]
for ndex, i in enumerate(['D', 'E', 'F', 'G', 'H']):
    final_string = ''
    build_list = str(pd.read_excel('weekexport.xlsx', sheet_name='Foaie1',
                                   header=None, usecols=i, index_col=None)).split('\n')
    for string in build_list:
        x = ' '.join(string.split()).split()
        if len(x) > 1:
            final_string = '{} {}\n'.format(final_string, ' '.join(string.split()).split()[1])
    var_lst[ndex].set(final_string)

结果:

进一步审查:

您可能想要更改某些内容。例如,如果需要,您可以在一行上使用 global all。 global var1, var2, var3 ... 但是在你的代码中 global 根本不需要。

您已经动态构建了条目信息,所以让我们为您的标签和其他变量做同样的事情。

我还注释掉了一些根本没有使用的行,您的代码似乎仍在工作,所以如果您有任何问题,请告诉我。

我删除了未使用的导入,并对您的代码进行了一些常规清理以更紧密地遵循 PEP8。

修改后的代码:

import tkinter as tk
from tkinter import font
from datetime import date, datetime
from openpyxl.styles import Alignment
from warnings import simplefilter
from pandas import ExcelWriter
import pandas as pd
import openpyxl


def export_excel():
    # wb_sales = pd.ExcelFile("excel.xlsx")   # line not used
    sheet_3 = pd.read_excel("excel.xlsx", sheet_name=2, dtype=str)
    pd.set_option('display.max_rows', 500)
    pd.set_option('display.max_columns', 500)
    pd.set_option('display.width', 500)
    # read_sheets_name = wb_sales.sheet_names  # line not used
    weekenter = var.get()
    if weekenter == "6":
        writer = ExcelWriter('weekexport.xlsx')
        sheet_3.query("['6'] in Week").to_excel(writer, 'Foaie1', index=False)
        writer.save()
    if weekenter == "7":
        writer = ExcelWriter('weekexport.xlsx')
        sheet_3.query("['7'] in Week").to_excel(writer, 'Foaie1', index=False)
        writer.save()

    for ndex, i in enumerate(['D', 'E', 'F', 'G', 'H']):
        final_string = ''
        build_list = str(pd.read_excel('weekexport.xlsx', sheet_name='Foaie1',
                                       header=None, usecols=i, index_col=None)).split('\n')
        for string in build_list:
            x = ' '.join(string.split()).split()
            if len(x) > 1:
                final_string = '{} {}\n'.format(final_string, ' '.join(string.split()).split()[1])
        var_list[ndex].set(final_string)


def write_to_xlsx():
    wb = openpyxl.load_workbook('excel.xlsx')
    sheet = wb["Productie"]
    # week_number = date.today().isocalendar()[1]  # line not used.
    ws = wb.active
    maxim = ws.max_row + 1

    for i in range(8):
        ws.merge_cells(start_row=maxim, start_column=i+1, end_row=maxim + 1, end_column=i+1)  # A

    ws.merge_cells(start_row=maxim, start_column=24, end_row=maxim + 1, end_column=24)  # X
    ws.merge_cells(start_row=maxim, start_column=25, end_row=maxim + 1, end_column=25)  # Y
    week_number = date.today().isocalendar()[1]
    ws.cell(column=1, row=maxim, value=week_number)

    now = datetime.now()
    dt_string = now.strftime('%d/%m')
    ws.cell(column=2, row=maxim, value=dt_string)

    for ndex, entry in enumerate(entry_list):
        ws.cell(column=ndex+3, row=maxim, value=entry_list[ndex].get())
        entry_list[ndex].delete(0, 'end')

    rows = range(1, maxim + 1)
    columns = range(1, 8)
    for row in rows:
        for col in columns:
            sheet.cell(row, col).alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
    wb.save("excel.xlsx")


root = tk.Tk()
root.title("Main Menu")
root.geometry("1000x500")
font_mare = font.Font(family='Helvetica', size=14, weight='bold')
var = tk.StringVar()
simplefilter("ignore")
wb = openpyxl.load_workbook('excel.xlsx')
sheet = wb["Productie"]
week_number = date.today().isocalendar()[1]

label_list = ['Model', 'Etapa', 'Batch', 'Cantitate', 'S/N']
entry_list = []

for i in range(len(label_list)):
    tk.Label(root, text=label_list[i]).grid(row=i, column=0, sticky='w')
    entry_list.append(tk.Entry(root, width=10))
    entry_list[-1].grid(row=i, column=1, sticky='w')

tk.Button(root, text='Submit', command=write_to_xlsx).grid(row=2, column=2, sticky='W')
tk.Button(root, text='Week:', command=export_excel).grid(row=6, column=0, sticky='W')
entry = tk.Entry(root, textvariable=var, width=10).grid(row=7, column=0, sticky='w')

label_list_2 = ['Model', 'Batch', 'Cantitate', 'Serial', 'Number']
var_list = []
for ndex, i in enumerate(label_list_2):
    var_list.append(tk.StringVar(root))
    var_list[-1].set(i)
    tk.Label(root, textvariable=var_list[-1], font=font_mare).grid(row=8, column=ndex, sticky="w")

root.mainloop()

【讨论】:

  • 没问题,只需转换为字符串,然后解析数据以满足您的需求。乐意效劳。我将很快发布我注意到的其他内容的更新。如果我的帖子回答了您的问题,请选中它旁边的复选标记,以便其他人知道您的问题已解决。
  • @FilipAdrian 我已经添加了您的代码的进一步修订。如果您有任何问题,请告诉我。
猜你喜欢
  • 2018-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 2020-11-09
  • 1970-01-01
  • 2023-01-04
  • 2015-09-03
相关资源
最近更新 更多