2014-12-03 29 views
1

這是我的第一個Python個人項目。我想用Tkinter創建一個窗口(GUARDIAN LOCATOR),要求用戶在輸入框中輸入一個值(輸入水手監護人)。程序的其餘部分取決於用戶在輸入框中輸入的內容,因爲我將對輸入的水手監護人做出反應的if/else語句。Tkinter商店輸入框值作爲其他文件的值

我遇到的問題是將在輸入框中輸入的內容存儲爲我的主文件中用於if/else語句的變量。我可以將值打印到提示窗口,但我無法將其成功存儲到全局變量。

我的Tkinter窗口在它自己的類中。

我已經嘗試了許多不同的方法來做這個基於類似的問題從stackoverflow,但我每次都收到錯誤。這是我的基本代碼,仍然產生錯誤。

類文件與Tkinter的窗口

class GuardianLocator: 

def __init__(self, master): 
    frame = Frame(master) 
    frame.grid() 
    master.title("GUARDIAN LOCATOR") 

    self.locator_label = Label(frame, text="Which Sailor Guardian are you looking for?", width=40, height=2) 
    self.locator_label.grid() 

    self.entry = Entry(frame) 
    self.entry.grid() 

    self.button1 = Button(frame, text="Search", command=self.guardian_name, pady=2) 
    self.button1.grid() 

def guardian_name(self): 
    print(self.entry.get()) 

和我的主要工作文件

root = Tk() 
locator = guardian_locator.GuardianLocator(root) 

root.mainloop() 

這是我的測試循環,看看它的工作。

if locator.guardian_input() is "Sailor Moon": 
    print("hi") 
else: 
    print("no") 

回答

1

不知道你的代碼是如何組織的哪裏是你的「測試循環」的位置,但我相信它是root.mainloop()後。因此腳本可以如下:

from tkinter import * 


class GuardianLocator: 

    def __init__(self, master): 
     self._name = "" 
     frame = Frame(master) 
     frame.grid() 
     master.title("GUARDIAN LOCATOR") 

     self.locator_label = Label(frame, text="Which Sailor Guardian are you looking for?", width=40, height=2) 
     self.locator_label.grid() 

     self.entry = Entry(frame) 
     self.entry.grid() 

     self.button1 = Button(frame, text="Search", command=self.guardian_name, pady=2) 
     self.button1.grid() 

    def guardian_name(self): 
     self._name = self.entry.get() 
     print(self.entry.get()) 


root = Tk() 
locator = GuardianLocator(root) 

root.mainloop() 

# this will be executed after the root window is closed. 
print("Name is", locator._name) 

請注意self._name = ""在構造函數中。該實例變量可用於存儲GuardianLocator窗口中提供的名稱。

+0

Omgosh工作!我早些時候嘗試過一種非常類似的方法,但是我一定會以某種方式搞砸它。謝謝Marcin! – djohnson129 2014-12-03 06:38:05

+0

@ djohnson129如果anwser很好,那麼接受它也會很好:-) – Marcin 2014-12-03 06:52:27

+0

如果你的意思是點擊對號,我就是這麼做的。我還不知道:/ – djohnson129 2014-12-03 21:18:59