2015-01-16 27 views
0

嗨,我一直在努力讓這個工作,每次我改變的東西,我收到另一個錯誤。我一直在嘗試創建一個帶有函數的輸入框,然後將輸入框中的變量放入由按鈕按鈕創建的標籤中。當我試圖經常這樣做時,這個錯誤就出現了。將StringVar對象從入口傳遞到tkinter函數內的標籤

TypeError: get() missing 1 required positional argument: 'self'

我然後把自己在方法括號內。

command = lambda: x.myFunc(self.my_variable.get(self))

然後另一個錯誤,這我不知道如何整理。

AttributeError: 'My_Class' object has no attribute '_tk' 

下面是完整的代碼,我是新來的類和self,所以任何修正都歡迎。

from tkinter import * 
import time 

class My_Class: 
    def start(self): 
     self.root=Tk() 
     self.my_variable=StringVar 
     self.entry_box=Entry(self.root, textvariable=self.my_variable) 
     self.entry_box.pack() 
     self.button=Button(self.root,text="Pass variable now", 
     command=lambda:x.myFunc(self.my_variable.get(self))) 
     self.button.pack() 

def myFunc(self,my_variable): 
    self.lab=Label(self.root,text=self.my_variable) 
    self.lab.pack() 

x=My_Class() 
x.start() 

回答

1

這是創建一個StringVar對象的正確方法:

text = StringVar() # note additional() 

你能解釋我什麼x是在下面的語句:

lambda: x.myFunc(self.my_variable.get(self)) 

x是不是裏面可見因爲它是在課堂外宣佈的。

myFunc沒有正確縮進:您應該縮進它,如__init__方法。

我確實建議你在繼續操作之前觀看一些面向對象的教程。你基本上在猜測OOP是如何工作的。

+0

我會爲現在做的感謝,我沒有意識到這一點很多麼複雜。 'x'是My_Class類的一部分,我沒有意識到要做什麼。感謝您的幫助,需要大量的教程! –

1

如果你製作myFunc一個方法,如果這個類(你可能試圖做;很難知道,因爲你的縮進是錯誤的),你不必傳遞任何東西到myFunc。該功能可以訪問課程中的所有內容,因此可以在需要時獲得所需內容。這可以讓您免除lambda的使用,這有助於降低複雜性。

此外,您通常根本不需要StringVar,這只是追蹤的一件事。但是,如果您確實需要標籤和條目來顯示完全相同的數據,請讓它們共享相同的文本變量,並且文本會自動更新,而無需調用函數,或從窗口小部件獲取值,或將值n標籤。

這裏是不使用StringVar一個例子:

class My_Class: 
    def start(self): 
     ... 
     self.entry_box = Entry(self.root) 
     self.button = Button(..., command = self.myFunc) 
     ... 

    def myFunc(self): 
     s = self.entry_box.get() 
     self.lab = Label(..., text = s) 
     ... 
+0

好吧,我明白爲什麼現在不工作。感謝您的幫助:) –