2014-08-28 56 views
-1

當我輸入entrybox1時,它自動出現在輸入框2中。所以就像entrybox發生的任何事情發生在entrybox2。Tkinter Entry Box 2正在接收輸入框1的字符,而我在輸入框1中鍵入

下面是我的代碼

from Tkinter import* 
import random 

class Love: 
    def __init__(self): 
     window = Tk() 
     window.title("Love Calculator") 
     window.geometry("300x180") 

     frame1 = Frame(window) 
     frame1.pack() 
     self.lbl = Label(frame1, text = "Love is Pure",fg="white",bg = "blue") 
     self.lbl2=Label(frame1, text ="are you meant for one another",fg="White",bg = "red") 
     self.lbl3=Label(frame1,text="Let FIND OUT!!",fg="white",bg = "green") 
     self.lbl.pack() 
     self.lbl2.pack() 
     self.lbl3.pack() 




     frame2=Frame(window) 
     frame2.pack() 
     label = Label(frame2,text = "Your Name") 
     label2 = Label(frame2, text= "Your Lovers name") 

     self.msg = StringVar 
     entry1 = Entry(frame2, textvariable =self.msg) 

     self.out = StringVar 
     entry2 = Entry(frame2, textvariable =self.out) 

     btCalculate=Button(frame2, text="Calculate", command=self.processButton) 

     label.grid(row=1,column=1) 
     label2.grid(row=2,column=1) 
     entry1.grid(row=1,column=2) 
     entry2.grid(row=2,column=2) 
     btCalculate.grid(row=4,column=3,sticky=E) 
+1

無法重現。但是,我的猜測是,這兩個'Entry's正在使用相同的''textvariable'。 (的確,你們是一樣的,因爲它們都是指'StringVar'類而不是創建兩個實例) – 2014-08-28 21:39:36

回答

2
有效地使用相同的textvariable

的兩個您輸入小工具。這是因爲你使用的是StringVar錯誤。你不是創建新的StringVar,你只是參考這個類。

總之,你需要這樣做:

self.msg = StringVar() 

...而不是這樣的:

self.msg = StringVar 

注意使用()

+0

非常感謝Bryan,我希望我能從你那裏得到更多的幫助。 – 2014-08-29 07:35:22

+0

+1對於Python 2.7,我確實可以重現這個問題(但對於2.6和3.4都沒有),但是請你解釋一下如何傳遞這個類實際上工作並且結果都具有相同的變量?我可以想象,傳遞可調用的結果將調用該可調用對象,但應該給出兩個單獨的變量。 – 2014-08-29 08:09:03

+1

@tobias_k:在引擎蓋下,textvariable只是一個字符串。當你傳遞一個可調用的(或其他任何東西)時,真正與widget有關的是'str(whatever)'。當你傳遞類名時,在這兩種情況下,下劃線tk代碼都被賦予了'「」',所以tk認爲它們是相同的文本變量。 – 2014-08-29 10:29:18

相關問題