首页 > 解决方案 > 如何在 tkinter 的列表框中打印字典列表

问题描述

我正在开发一个应用程序来在电子表格中搜索一些客户的开放费用,将其保存在字典中并在图形界面中打印。代码本身可以完美运行,但是,当列表最后变得太大时,其余内容将被截断。你能告诉我解决它的方法吗?

from tkinter import *
import openpyxl

root = Tk()

def hono_aberto():
    newWindow = Toplevel()
    newWindow.title("Output")
    newWindow.geometry("400x350+375+50")

    # Opens the spreadsheet and obtains the status of the last payment.

    wb = openpyxl.load_workbook('C:/temp/cobranca.xlsx')
    sheet = wb['Sheet1']

    lastCol = sheet.max_column
    # latestMonth = sheet.cell(row=1, column=lastCol).value

    # Checks the payment status of each customer.

    unpaidMembers = {}
    clients = []
    months = []
    emails = []
    for r in range(2, sheet.max_row + 1):
        for c in range(3, lastCol + 1):
            payment = sheet.cell(row=r, column=c).value
            if payment != 'ok':
                client = sheet.cell(row=r, column=1).value
                email = sheet.cell(row=r, column=2).value
                month = sheet.cell(row=1, column=c).value
                clients.append(client)
                months.append(month)
                emails.append(email)
                unpaidMembers[client] = email
                print('Line:', r, 'Column:', c, 'Client:', client, 'Email:', email, 'Month:', month)


    #--- LABELS ---#
    l_label1 = Label(newWindow, text="Client", font='-weight bold')
    l_label1.grid(row=1, column=1)
    l_label2 = Label(newWindow, text="Competence", font='-weight bold')
    l_label2.grid(row=1, column=2)
    l_label3 = Label(newWindow, text="E-mail", font='-weight bold')
    l_label3.grid(row=1, column=3)

    v_result1 = StringVar()
    l_cliente = Label(newWindow, textvariable=v_result1)
    l_cliente.grid(row=2, column=1)
    v_result2 = StringVar()
    l_mes = Label(newWindow, textvariable=v_result2)
    l_mes.grid(row=2, column=2)
    v_result3 = StringVar()
    l_email = Label(newWindow, textvariable=v_result3)
    l_email.grid(row=2, column=3)

    #--- OUTPUT ---#
    v_result1.set('\n'.join(clients))
    v_result2.set('\n'.join(months))
    v_result3.set('\n'.join(emails))




bt = Button(root, text='Check', command=hono_aberto)
bt.grid(row=1, column=1)

root.mainloop()

这是使用的电子表格模型:https ://prnt.sc/123sxpd

标签: pythontkinter

解决方案


可能是因为文本区域不够用。您可以做的一件事是每页显示 10 或 15 个客户端(您决定,无论看起来有用)数据。这应该是你开始的地方。

https://www.geeksforgeeks.org/tkinter-application-to-switch-between-different-page-frames/

然后您要做的是每次单击新页面按钮时更改显示。这应该可以解决您的问题


推荐阅读