Различные записи tkinter принимают одинаковое значение - PullRequest
0 голосов
/ 05 июня 2019

во время практики с tkinter я столкнулся с этой проблемой. Я хочу настроить 4 разных записи, где пользователь должен ввести 4 разных значения. Проблема в том, что, когда я пытаюсь это сделать, я вписываю значение в любую запись, и значение автоматически переходит ко всем записям.

Т.е.: я набираю 4 в любой из четырех записей, и все записи получают 4. (см. Изображение)

Это код на данный момент:

from tkinter import *


class Application(Frame):
    def Check(self):
        print("check result")

    def createWidgets(self):

        self.tile1.pack(side=RIGHT, padx=20, pady=10)
        self.tile2.pack(side=RIGHT, padx=20, pady=10)
        self.tile3.pack(side=RIGHT, padx=20, pady=10)
        self.tile4.pack(side=RIGHT, padx=20, pady=10)
        self.QUIT.pack({"side": "left", "ipadx": 20, "padx": 10, "pady": 20})
        self.check.pack({"side": "left", "ipadx": 20, "padx": 10, "pady": 20})
    '''
    def callback(self,tile1,tile2,tile3,tile4):
        self.tile1.set(self.tile1.get()[:1])
        self.tile2.set(self.tile2.get()[:1])
        self.tile3.set(self.tile3.get()[:1])
        self.tile4.set(self.tile4.get()[:1])
    '''
    def __init__(self, master=None):
        Frame.__init__(self, master)

        self.num1 = int(0)
        self.num2 = int(0)
        self.num3 = int(0)
        self.num4 = int(0)

        self.tile1 = Entry(master=root, textvariable=self.num1, width=1)
        self.tile2 = Entry(master=root, textvariable=self.num2, width=1)
        self.tile3 = Entry(master=root, textvariable=self.num3, width=1)
        self.tile4 = Entry(master=root, textvariable=self.num4, width=1)

        self.QUIT = Button(self)
        self.QUIT["text"] = "QUIT"
        self.QUIT["fg"] = "red"
        self.QUIT["command"] = self.quit

        self.check = Button(self)
        self.check["text"] = "Check",
        self.check["command"] = self.Check

        self.pack()
        self.createWidgets()


root = Tk()
app = Application(master=root)
app.master.title("Insertar titol")
app.master.maxsize(500, 500)
app.mainloop()
root.destroy()

1 Ответ

1 голос
/ 05 июня 2019

Проблема в том, что вы используете то же значение и неправильный тип значения для атрибута textvariable.Атрибут textvariable требует экземпляра одной из переменных tkinter, таких как StringVar или IntVar.

По сути, вы говорите каждому виджету Entry сохранять его данные в переменной с именем 0 (ноль).Поскольку каждый виджет использует одно и то же имя переменной, виджеты неразрывно связаны, так что изменение одного из них затрагивает их все.

Решение состоит в том, чтобы вместо этого использовать отдельные экземпляры StringVar или IntVar для каждого виджета.буквального нуля.

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