Я изучаю tkinter, ценю ваш опыт и терпение! Я создаю GUI, где вы нажимаете кнопку, чтобы добавить строки или столбцы. См. здесь . Когда я нажимаю «Добавить Mov ie», я получаю окно, которое выглядит как это . Когда я нажимаю «Добавить критерии оценки», я получаю это. И так далее, бесконечно.
Это работает как задумано. Однако Я не знаю, как получить эту таблицу записей в массив, который будет использоваться для 'get ()' входных значений . Я пробовал numpy hstack, vstack, concatenate, append и т.д. c. но это не сработает, если они не одного размера.
Как лучше всего это сделать ? См. Мой фрагмент кода ниже. Заранее спасибо!
import tkinter as tk
from functools import partial
import numpy as np
import pandas as pd
#%% CREATE CLASS
class movieRatings:
numberOfMovies = 1
numberOfRateCriteria = 1
masterEntryArray = [['Movie'],['Rating']]
def __init__(self,root):
self.root=root
#create frame
self.optionsFrame = tk.Frame(root)
self.optionsFrame.pack(fill=tk.X,side=tk.TOP)
self.optionsFrame.config(bg='blue',
height = self.windowHeight/10)
#%% CONTENT FOR OPTIONS FRAME
self.addMovieButton = tk.Button(self.optionsFrame)
self.addMovieButton.pack(expand=tk.TRUE,fill=tk.BOTH,side=tk.LEFT)
self.addMovieButton.config(text='Add Movie', command=self.addMovieFunction)
self.addRatingButton = tk.Button(self.optionsFrame)
self.addRatingButton.pack(expand=tk.TRUE,fill=tk.BOTH,side=tk.LEFT)
self.addRatingButton.config(text='Add Rating Criteria', command=self.addRatingFunction)
#%% CONTENT FOR CONTENT FRAME
self.movieNameLabel = tk.Label(self.contentFrame)
self.movieNameLabel.grid(row=0,column=0)
self.movieNameLabel.config(text='Movie Name')
self.movieRateCriteriaLabel = tk.Label(self.contentFrame)
self.movieRateCriteriaLabel.grid(row=0,column=1)
self.movieRateCriteriaLabel.config(text='Rating')
self.initialMovieEntry = tk.Entry(self.contentFrame,width=5,fg='blue',font=('Arial',16,))
self.initialMovieEntry.grid(row=1,column=0)
self.initialRatingEntry = tk.Entry(self.contentFrame,width=5,fg='blue',font=('Arial',16,))
self.initialRatingEntry.grid(row=1,column=1)
# np.concatenate((self.masterEntryArray,[self.initialMovieEntry,self.initialRatingEntry]))
#%% FUNCTIONS FOR OPTIONS FRAME
def addMovieFunction(self):
#add new entry row
_newRow = []
for eachCol in range(self.numberOfRateCriteria+1):
_newEntry = tk.Entry(self.contentFrame)
_newEntry.grid(row=self.numberOfMovies+1,column=eachCol)
_newEntry.config(width=5,fg='blue',font=('Arial',16,))
_newRow.append(_newEntry)
self.numberOfMovies += 1
# np.vstack(self.masterEntryArray, _newRow)
# print(self.masterEntryArray)
def addRatingFunction(self):
#add new entry cols
for eachRow in range(self.numberOfMovies+1):
_newEntry = tk.Entry(self.contentFrame)
_newEntry.grid(row=eachRow,column=self.numberOfRateCriteria+1)
_newEntry.config(width=5,fg='blue',font=('Arial',16,))
self.numberOfRateCriteria += 1
#%% MAIN FUNCTION
def main():
#create parent window
root = tk.Tk()
app = movieRatings(root)
root.mainloop()
#%% CALL MAIN
if __name__ == "__main__": main()
Боковое примечание: я также пытаюсь найти способ, чтобы, когда я нажимаю 'tab', чтобы l oop через ячейки, он работал так, как вы ожидаете. Прямо сейчас, когда добавляются новые строки / столбцы, он будет l oop через каждую из добавленных строк / столбцов, как свою собственную таблицу.