Как экспортировать выборки, сделанные в tkinter Combobox, в Excel или текстовый файл?

avatar
tehgee
8 августа 2021 в 20:28
194
1
-1

Я работаю над программой, которая будет использоваться для внутреннего заказа запчастей между магазинами. В настоящее время у меня отлично работает графический интерфейс, и в коде нет ошибок.

GUI

Я хочу, чтобы в нижней части графического интерфейса была кнопка с надписью «Отправить», которая будет читать сделанный выбор, а затем экспортировать его в файл, который может быть прочитан отделом логистики. Я обыскал Интернет, но не могу найти такую ​​вещь для python.

Я бы предпочел экспортировать выборки в электронную таблицу Excel, но текстовый файл тоже подойдет, если его можно закодировать так, чтобы его было легко читать.

Поскольку я получил плохой комментарий к последнему сообщению, я опубликую код для двух типов полей выбора, которые у меня есть. Код, вставленный в файл .py, откроет аналогичный графический интерфейс.

from tkinter import *
from tkinter.ttk import *
master = Tk()
master.geometry("400x400")

def openiPhone5():
    iPhone5 = Toplevel(master)
    iPhone5.geometry("800x800")
    Label(iPhone5,
          text="iPhone 5").grid()
    #Variabel til iPhone 5 Farver
    iPhone5Colors =('Sort', 'Hvid')

    #PARTS###

    #OrginalSkærm
    OGscreen = Combobox(iPhone5)
    OGscreenColor = Combobox(iPhone5)
    OGscreen['values'] = (1, 2, 3, 4, 5, "Text")
    OGscreenColor['values'] = iPhone5Colors
    OGscreen.current(0)  # set the selected item
    OGscreenColor.grid(column=3, row=7)
        #CUSTOM
    CustomAmount = Combobox(iPhone5)
    CustomTEXT = Combobox(iPhone5)
    CustomTEXT['text'] = (1, "Text")
    CustomAmount['values'] = (1, 2, 3, 4, 5, "Text")
    CustomAmount.current(0)  # set the selected item
    CustomAmount.grid(column=3, row=18)
    CustomTEXT.grid(column=3, row=17)
    Custom_lbl = Label(iPhone5,
                       text="Custom")
    Custom_lbl.grid(column=1, row=17)

def openNewWindow1():
    # Toplevel object which will
    # be treated as a new window
    newWindow1 = Toplevel(master)

    # sets the title of the
    # Toplevel widget
    newWindow1.title("Apple")

    # sets the geometry of toplevel
    newWindow1.geometry("800x800")

    # A Label widget to show in toplevel
    Label(newWindow1,
          text="iPhones").grid()
    btn = Button(newWindow1,
                 text="iPhone 5",
                 command=openiPhone5)
Источник
TheLizzard
8 августа 2021 в 20:30
0

Знаете ли вы, как получить выбранное пользователем значение из Combobox? Если это так, то вопрос не нуждается в теге tkinter.

tehgee
8 августа 2021 в 20:43
0

@TheLizzard, к сожалению, я этого не знаю. Я новичок на этом сайте, поэтому не знаю, какие теги использовать, извините.

TheLizzard
8 августа 2021 в 20:54
0

Не волнуйся. На будущее: теги используются для обращения к определенным людям за помощью. Например, я отвечаю на вопросы с тегами tkinter, но я действительно не знаю, как работает Excel. Если вы используете правильные теги для вопроса, вы, скорее всего, получите лучший ответ от того, кто обладает знаниями в этой области.

Bryan Oakley
8 августа 2021 в 21:19
1

Вы объяснили, что вы создаете, но не задали вопроса. С какой частью проблемы вы боретесь?

tehgee
8 августа 2021 в 21:24
0

@BryanOakley «Я хочу, чтобы в нижней части графического интерфейса была кнопка «Отправить», которая будет читать сделанный выбор, а затем экспортировать его в файл, который может быть прочитан отделом логистики. Я прошерстил Интернет, но не могу кажется, нашел такую ​​вещь для python».

tehgee
8 августа 2021 в 21:25
0

@TheLizzard Спасибо, возможно, вы знаете, как экспортировать выбранное пользователем значение в текстовый файл?

tehgee
8 августа 2021 в 21:29
0

@BryanOakley Мне нужна помощь в извлечении данных из виджета, я никого не просил писать код для меня, я чувствую, что по какой-то причине вы просто преследуете меня, это второй раз, когда вы комментируете мои сообщения со всем негативом. Если вы можете опубликовать документацию, я был бы признателен, так как я не могу найти ничего близкого. Я не знаю, как получить данные из списка или как записать эти данные во внешний файл. Если вы можете помочь мне с этим или прислать мне документацию по этому вопросу, спасибо. Если нет, хорошего дня, Брайан.

Bryan Oakley
8 августа 2021 в 23:06
1

" я никого не просил писать код для меня, я чувствую, что вы просто преследуете меня по какой-то причине", - я не преследую вас, просто ваш вопрос - это просто набор требований . Вы не приложили никаких усилий, пытаясь решить эту проблему самостоятельно. См. раздел Какого объема исследований ожидают пользователи Stack Overflow?. Я просто пытаюсь дать вам более конкретное представление о том, какая помощь вам нужна, поскольку это совсем не очевидно из самого вопроса.

acw1668
9 августа 2021 в 08:49
0

Вы можете сохранить ссылки на эти Combobox в списке, затем просмотреть список и использовать <Combobox>.get(), чтобы получить выбранные элементы, когда вы хотите экспортировать их в файл.

Ответы (1)

avatar
Bryan Oakley
8 августа 2021 в 23:29
0

Самый простой способ — начать с ассоциирования переменной с каждым выпадающим списком. Затем вы можете сохранить эти переменные в списке или словаре. Чтобы получить данные, достаточно перебрать список или словарь и вызвать get для каждой переменной.

Вот пример очень упрощенного примера, который создает 10 полей со списком со связанными переменными:

combo_vars = []
for i in range(10):
    var = tk.StringVar(root, value=0)
    combo_vars.append(var)
    label = tk.Label(form, text=f"Value {i+1}:")
    combo = ttk.Combobox(form, textvariable=var, width=20, values=list(range(5)))

    label.grid(row=i, column=0, sticky="e")
    combo.grid(row=i, column=1, sticky="w")

Например, предположив, что у вас есть переменная с именем combo_vars, которая содержит экземпляры StringVar, как в предыдущем примере, вы можете получить все значения и распечатать их в простом цикле. Есть более краткий способ сделать это, используя понимание списка, но я использую более подробный метод, чтобы его было легче понять.

values = []
for var in combo_vars:
    value = var.get()
    values.append(value)

При этом values имеет список значений. Затем вы можете делать с этим списком все, что хотите: преобразовать их в список, разделенный запятыми, записать их в базу данных, преобразовать их в json, сохранить в файл Excel или сделать что-то еще, что вам нужно.

Например, чтобы записать список, разделенный запятыми, в файл, вы можете использовать модуль csv следующим образом:

import csv
...
with open("data.csv", "w") as csvfile:
    writer = csv.writer(csvfile, values)
    writer.writerow(values)