mit dem a. Programm habe ich eine 9 x 9 Matrix mit Feldern als tk.StringVar() und entsprechender Liste 'vars' angelegt.
In die Felder möchte ich Werte eintragen und diese speichern.
Da ich die Daten auch als Sicht auf Zeilen, Spalten, Cubes und Gesamtliste betrachten möchte, habe ich eine class 'Matrix‘ angelegt.
Wenn ich auf den Buttton Speichern drücke, erhalte ich allerdings die Fehlermeldung
> AttributeError: type object 'Matrix' has no attribute 'vars'
Diesen Fehler bekomme ich diesmal nicht gelöst.
Ich wundere mich auch, warum ‚type object‘ und nicht ‚class object‘.
Allerdings habe ich mit der Behandlung von tk.Listen schon Probleme.
Mit dem Ansatz von Entry Widjets bin ich gar nicht klargekommen.
Im diesem Beitrag werden sie auch nicht einem tkinter Fenster oder Feld zugeordnet.
https://stackoverflow.com/questions/326 ... ry-widgets
Vielen Dank für eure Hilfe
Code: Alles auswählen
import tkinter as tk
from functools import partial
import unicodedata
def gui(ausgabe = ''):
global i
global entry
entry =""
global entries
entries = []
class Matrix():
def __init__(self, entries, vars):
self.entries = entries
self.vars = vars
#self.elements = elements
def chg_col_y():
col_now = col_now_y
if col_now == col_ay:
col_now = col_by
else:
col_now = col_ay
return col_now
def tast_laden(Matrix):
print ("Liste laden")
def tast_save(Matrix):
print ("Listen speichern")
#liste_entries = matrix.entries.get()
#print ("im Makro Taste save - erste Entry ", liste_entries[0])
liste_vars = Matrix.vars.get()
print ("im Makro Taste save - erste Var ", liste_vars[0])
# HIER FÄNGT DER MAIN-LOOP AN
root = tk.Tk()
rel = tk.StringVar()
rel = tk.RAISED
Eing_txt = tk.StringVar()
entries = []
Liste_Ein = []
global col_ay, col_by
col_ay = "white smoke"
col_by = "floral white"
col_now_y = col_ay
col = col_now_y
dir_pc = "E:\\"
dir_tab = ""
dir = dir_pc
dateiname = "sudo_g.txt"
dateipfad = dir + dateiname
root.title("Sudoku")
rahmen = tk.Frame(root, relief="ridge", borderwidth=3)
rahmen.pack(fill = "both", expand = 1)
frame_left = tk.Frame(rahmen, width=400, height =500, relief="ridge", borderwidth=3)
frame_left.grid(column=0, row=0)
vars = []
for i in range(1,10): #Rows
if (i-1) % 3 == 0:
col_now_y = chg_col_y()
col = col_now_y
for j in range(1,10): #Columns
var = tk.StringVar()
vars.append(var)
if j % 3 == 0: bw=2
else: bw = 1
frame_i = tk.Frame(
master=frame_left,
relief=rel,
borderwidth=bw
)
frame_i.grid(row=i, column=j, columnspan = 1, rowspan = 1)
entry=(tk.Entry(master=frame_i, textvariable=vars[-1], width=5, bg = col))
entries.append(entry)
entries.insert(5, "abc")
entry.pack()
matx = Matrix(entries, vars)
frame_right = tk.Frame(rahmen, width=300, height =500, relief="ridge", borderwidth=3)
frame_right.grid(column=1, row=0, sticky='n')
taste_laden = tk.Button(frame_right, width = 12, text="Werte laden", font=('arial', 12),
command = partial(tast_laden), bg="old lace")
taste_laden.grid (column=0, row=0, sticky='n', pady=0, padx=0)
taste_speichern = tk.Button(frame_right, width = 12, text="Werte speichern", font=('arial', 12),
command = partial(tast_save, Matrix), bg="old lace")
taste_speichern.grid (column=0, row=1, pady=0, padx=0)
root.mainloop()
if __name__ == "__main__":
gui()