我遇到了Python Tkinter的这个问题。我正在尝试创建一个用户界面表单屏幕,要求用户在屏幕上显示的输入框中输入值。我设置了它,所以两个Entry Box在同一个类中(该类是界面屏幕)。问题是,当我输入其中一个框时,我输入的文本不仅会显示在我输入的框中,还会显示在另一个框中。
以下是相关代码。
class GenericSkeleton: # The template for all the screens in the program
def __init__(self):
self.GenericGui = Tk()
self.GenericGui.title('Radial Arc Calculator')
self.GenericGui.geometry('360x540')
self.GenericGui.resizable(width = FALSE, height = FALSE)
Label(self.GenericGui,text = 'Radial Arc Calculator',font = ('Ariel',18)).place(x=65,y=35)
def destroy(self):
self.GenericGui.destroy()
class InputScreen(GenericSkeleton):
def __init__(self):
GenericSkeleton.__init__(self)
Button(self.GenericGui,text = 'CALCULATE',height = 1, width = 25, command = calculate, font = ('TkDefaultFont',14)).place(x=37,y=400)
Button(self.GenericGui,text = 'CLOSE',height = 1, width = 11, command = close, font = ('TkDefaultFont',14)).place(x=37, y=450)
Button(self.GenericGui,text = 'HELP', height = 1, width = 11, command = DisplayHelp, font = ('TkDefaultFont',14)).place(x=190, y=450)
Label(self.GenericGui,text = 'Enter Radius (mm):', font = ('TkDefaultFont',14)).place(x=37, y=180)
Label(self.GenericGui,text = 'Enter point distance (mm):', font = ('TkDefaultFont',14)).place(x=37, y=250)
Entry(self.GenericGui,textvariable = Radius, width = 10, font = ('TkDefaultFont',14)).place(x=210, y=180)
Entry(self.GenericGui,textvariable = Distance, width = 5, font = ('TkDefaultFont',14)).place(x=265, y=250)
run = InputScreen()
输入框位于代码的底部,我希望它足够/不太多来解决问题。
答案 0 :(得分:0)
问题是它们共享相同的textvariable
(你使用不同的变量名,但它们具有相同的值,这使得它们在tkinter的眼中是相同的)。我的建议是不要使用textvariable
属性。你不需要它。
但是,如果删除textvariable
的使用,则需要将窗口小部件创建与窗口小部件布局分开,以便您可以保留对窗口小部件的引用。然后,您可以在窗口小部件(而不是变量)上使用get
方法来获取值:
self.entry1 = Entry(...)
self.entry2 = Entry(...)
self.entry1.place(...)
self.entry2.place(...)
稍后,您可以获得如下值:
radius = int(self.entry1.get())
distance = int(self.entry2.get())
如果确实需要textvariable
(通常仅在使用tkinter变量的trace
功能时),则必须使用tkinter变量(StringVar
,{{1而不是常规变量。