Как ограничить количество знаков в виджете Entry с помощью Tkinter - PullRequest
0 голосов
/ 29 мая 2018

Здравствуйте, я пытался сделать это в цикле, но не могу понять, почему только последний созданный является единственным ограниченным?Я бы хотел ограничить 12 созданных виджетов в цикле 4 знаками.Кто-нибудь может мне помочь?: 3

PS.Извините, если что-то не было очищено, я задаю вопрос здесь в первый раз.

from tkinter import *
import trace
import random


class Plansza:

    def __init__(self, master):


        self.frame = Frame(master, bg="brown")
        self.frame.pack()
        self.tab = [random.randint(1, 6),random.randint(1, 6),random.randint(1, 6),random.randint(1, 6)]
        print(self.tab)
        print(len(self.tab))
        self.max_len = 4

        self.wynik = StringVar()
        self.wynik.set(self.tab)

        self.goal = Entry(self.frame, width=6, font=50, fg="purple", justify=CENTER, textvariable=self.wynik, show="*")
        self.goal.grid(row=0, column=1, padx=30, pady=30)

        self.pokaz = Button(self.frame, text = "Pokaż", command=self.show)
        self.pokaz.grid(row=0, column=2)
        self.wiersz=1
        print(self.wynik.get())
        self.var = [1,1,1,1,1,1,1,1,1,1,1,1]
        self.iter = 0
        self.map()

        self.sprawdz = Button(self.frame, text = "Sprawdź")
        self.sprawdz.grid(row=self.wiersz+1, column=1, padx=50, pady=50)



    def on_write(self, *arg):
        s = self.var[self.iter].get()
        if len(s) > self.max_len:
            self.var[self.iter].set(s[:self.max_len])


    def show(self):
        self.goal.config(show="")

    def map(self):
        self.var[self.iter]=StringVar()
        self.var[self.iter].trace_variable("w", self.on_write)

        self.pole_na_odp = Entry(self.frame, width=6, font=50, fg="purple", justify=CENTER, textvariable=self.var[self.iter])
        self.pole_na_odp.grid(row=self.wiersz, column=1, padx=20, pady=20)
        self.wiersz+=1
        self.var.append([])
        self.iter+=1
        if(self.wiersz<12):
            self.map()

root = Tk()
b = Plansza(root)


root.mainloop()

[РЕДАКТИРОВАТЬ] Я сделал список, но теперь у меня есть другая ошибка: всякий раз, когда я хочу напечатать что-то в моих виджетах Entry, я получилen ошибка, подобная этой:

s = self.var[self.iter].get()
AttributeError: 'int' object has no attribute 'get'

И больше нет ограниченного количества пений даже в последнем виджете Entry.

1 Ответ

0 голосов
/ 29 мая 2018

(Ответьте на вопрос в вашем редакторе.)

В этой строке

s = self.var[self.iter].get()

похоже, что вы пытаетесь использовать get(), чтобы вернуть элемент self.var,Это не так, как списки работают.Я почти уверен, что ты хочешь это

s = self.var[self.iter]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...