Обновление имен столбцов из Excel в Combobox для Tkinter в Python - PullRequest
0 голосов
/ 21 февраля 2020

Цель: Я пытаюсь, чтобы скрипт просматривал каталог с именем «data», который находится в рабочем каталоге скрипта для книг Excel. Затем сценарий будет иметь меню опций различных рабочих книг, из которых затем будет предоставлен выбор имен столбцов для выбора в поле со списком выше.

Результаты: Я смог чтобы заставить его читать рабочую книгу Excel по умолчанию при запуске, но когда я выбираю другую рабочую книгу, поле со списком не обновляет имена столбцов.

Я пытался включить какую-то функцию обновления, но продолжаю иметь проблема даже в том, что он работает, потому что одна или несколько вещей на самом деле не совпадают. Я все еще новичок в python и tkinter, поэтому я хотел бы получить несколько советов и предложений для решения этой проблемы.

import tkinter
from tkinter import ttk
from tkinter import *
import pandas as pd


def _quit():
    root.quit()
    root.destroy()


root = Tk()
root.title('BLURG')
root.geometry("1280x720")

path = os.chdir('Data')
filenames = os.listdir(path)
data_as_list = []
for filename in filenames:
    if filename.endswith('.xlsx') or filename.endswith('.xls'):
        data_as_list.append(filename)

clicked = StringVar()
options = data_as_list
clicked.set(options[0])
drop = OptionMenu(root, clicked, *options)
drop.pack(side="right")

data = pd.read_excel(clicked.get())
df = pd.DataFrame(data)
col_name = list(df.columns)
labelx = tkinter.Label(root, text="x-axis: ")
combox = ttk.Combobox(root, values=col_name)

labelx.pack(side="top")
combox.pack(side="top")

button = tkinter.Button(master=root, text="Quit", command=_quit)
button.pack(side=tkinter.BOTTOM)

root.mainloop()

1 Ответ

0 голосов
/ 21 февраля 2020

Использование функции обновления с посткомандой устранило проблему.

...
def update_list():
    data = pd.read_excel(clicked.get())
    df = pd.DataFrame(data)
    col_name = list(df.columns)
    combox['values'] = col_name


labelx = tkinter.Label(root, text="x-axis: ")
combox = ttk.Combobox(root, postcommand=update_list)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...