tkinter不同条目的值相同

时间:2019-06-05 12:03:44

标签: python-3.x tkinter

在与tkinter一起练习时,我遇到了这个问题。我要设置4个不同项,用户必须在其中键入4个不同值。问题是当我尝试时,我会在任何条目中键入一个值,并且该值会自动转到所有条目。

即:我在四个条目中的任何一个中键入4,所有条目都得到一个4。 (see image)

这是到目前为止的代码:

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 个答案:

答案 0 :(得分:1)

问题是您为textvariable属性使用了相同的值和错误的值类型。 textvariable属性需要tkinter变量之一的实例,例如StringVarIntVar

实质上,您是在告诉每个Entry小部件将其数据保存在名为0(零)的变量中。由于每个小部件都使用相同的变量名,因此这些小部件在本质上是链接在一起的,因此一个小部件的更改会影响它们。

解决方案是为每个窗口小部件使用StringVarIntVar的不同实例,而不是文字零。