在与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()
答案 0 :(得分:1)
问题是您为textvariable
属性使用了相同的值和错误的值类型。 textvariable
属性需要tkinter变量之一的实例,例如StringVar
或IntVar
。
实质上,您是在告诉每个Entry
小部件将其数据保存在名为0
(零)的变量中。由于每个小部件都使用相同的变量名,因此这些小部件在本质上是链接在一起的,因此一个小部件的更改会影响它们。
解决方案是为每个窗口小部件使用StringVar
或IntVar
的不同实例,而不是文字零。