使用python Tkinter时,如何在显示相同输入文本的同一个类中停止两个输入框?

时间:2016-03-08 20:18:38

标签: python text tkinter field tkinter-entry

我遇到了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()

输入框位于代码的底部,我希望它足够/不太多来解决问题。

1 个答案:

答案 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而不是常规变量。