#python-3.x #tkinter
#python-3.x #tkinter
Вопрос:
Я использую tkinter и создал метку с textvariable. Я хочу, чтобы в этом ярлыке было указано, скажем, 5 лучших клиентов. Список клиентов взят из файла Excel.
Часть моего кода:
import pandas as pd
import tkinter as tk
from tkinter import ttk
df = pd.read_excel('Sample.xlsx', "Sheet1")
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.grid_rowconfigure(1, weight=1)
self.grid_columnconfigure(1, weight=1)
self.grid()
self.baseDown = tk.Frame(root, width=800, height = 400, background='#E6E6FA', relief = "groove", borderwidth = 2)
self.baseDown.grid(columnspan=7, row=1, rowspan = 4, pady = 1, padx = 2, sticky="wn")
self.BDown = tk.LabelFrame(self.baseDown, text = " Analysis ", width=800, height=400, background ='#E6E6FA', relief = 'ridge', borderwidth = 2)
self.BDown.config(font = ('Verdana', 8, 'bold'))
self.BDown.grid(columnspan=7, row=1, rowspan = 4, pady = 3, padx = 2, sticky="wn")
self.baseDown.grid()
self.cust_var = tk.StringVar()
self.lbl_custname = ttk.Label(self.BDown, textvariable = self.cust_var)
self.lbl_custname.config(font=('Segoe UI', 8), width = 100)
self.lbl_custname.grid(row=1, column=1, columnspan=3, pady = 1, padx = 2, sticky="nw")
top = df.nlargest(5, columns=['Value'])
for index, row in top.iterrows():
self.cust_var.set(row[top['Customer Name'].values.astype(str)])
root = tk.Tk()
root.configure(background = 'white')
#root.resizable(False, False)
app = Application(master=root)
app.mainloop()
Результат выглядит следующим образом:
Пользователь1 NaN
Customer2 NaN
Пользователь3 NaN
Пользователь4 NaN
Пользователь5 NaN
Имя: 20371, dType: объект
Список клиентов правильный, но я не понимаю, почему там NaN и почему также отображается тип данных.
Мой файл Excel содержит только 2 столбца: Значение имени клиента
Ответ №1:
Вы устанавливаете self.cust_var
результат row[top['CustomerName'].values.astype(str)]
5 раз.
Если вы хотите показать то, что ожидаете, вы просто устанавливаете переменную один раз (замените цикл for):
self.cust_var.set('n'.join(top['Customer Name'].values))