Как получить выбранный элемент в многократном комбинированном ящике python tkinter в цикле - PullRequest
0 голосов
/ 25 апреля 2020

Я хотел бы создать таблицу, похожую на стиль Excel. Это должно быть в зависимости от размера отображаемого массива. По этой причине столбцы и строки таблицы находятся внутри циклов l oop. В первой строке я бы выделил поле со списком, чтобы выбрать значение для фильтрации. Также выпадающий список находится в цикле al oop для другого номера столбца.

Когда таблица создана, я не могу распознать, какой выбранный выпадающий список. Как можно ввести описание изображения здесь Я делаю?

Пример:

import tkinter
from tkinter import ttk #per button, label etc
from tkinter.ttk import *
import numpy as np #for the matrix tools

def newselection(event, output):
    print("Value selected:", event, output)

def ShowTableGui(MatrixToShowIn):
    MatrixToShow=np.array(MatrixToShowIn)
    RowNumber = MatrixToShow.shape[0]
    ArrayCombo=[]
    windowx=tkinter.Tk()
    windowx.title("Table viewer")
    buttonExit = ttk.Button(windowx, text="Close table", command=windowx.destroy)
#    buttonExit = ttk.Button(windowx, text="Run Filter", command= lambda: Run_filter(MatrixToShow.shape[1]))
    buttonExit.grid(column=0, row=0)
    for Col in range (int(MatrixToShow.shape[1])):
        ValuesInsert=MatrixToShow[:,Col] # values in column
        ValuesInsert=[row[Col]for row in MatrixToShowIn]
        ValuesInsert=list(set(ValuesInsert)) # values listed only once
        ValuesInsert.sort()
        ValuesInsert.insert(0,"*") # add * to filter all
        comboExample0 = ttk.Combobox(windowx, state='readonly', values=ValuesInsert)
        comboExample0.grid(column=Col+2, row=0)
        comboExample0.bind("<<ComboboxSelected>>", lambda event:newselection(comboExample0.get(), "output"))
#        comboExample0.bind("<<ComboboxSelected>>", lambda event:newselection(event, "output"))
        ArrayCombo.append(comboExample0)
        Select=comboExample0.get()
        print(Select)
        for Row in range (RowNumber):
            b = Entry(windowx, text="")
            b.grid(row=Row+1, column=Col+2)
            b.insert(0,str(MatrixToShow[Row][Col]))
    windowx.mainloop()
    return()

MatrixToShowIn=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
ShowTableGui(MatrixToShowIn)

Спасибо всем

Роберто

...