2016-12-31 87 views
-1

(長的問題)轉換Tkinter的文本框進入Python變量

我試着寫一段代碼使用Tkinter的文本框,當按下一個按鈕,將文件路徑從用戶。然後它會將該文本框條目轉換爲附加到普通python變量的字符串,以便稍後可以在該函數中使用該變量來使用該文件。我附加的代碼可以使標籤複製文本框條目,但我不能在「普通Python代碼」中使用該變量或myvar。另外,在代碼中,我嘗試通過函數mywarWritten返回myvar.get(),但是我不能設置一個等於mywarWritten(參數)的變量,因爲這取決於按下按鈕之前不會發生的文本框條目。當按下按鈕時,打印功能將打印語句,但當功能設置爲等於嘗試時,請不要返回。

(簡稱)

我想帶一個值,或字符串,從使用Tkinter的文本框中鍵入用戶,並使用條目作爲普通的Python變量。優選地,文本框中的值僅在按下按鈕時才被採用。

from Tkinter import * 
import Tkinter as tk 

root = Tk() 
root.title("MyApp") 

myvar = StringVar() 

def mywarWritten(*args): 
    print "mywarWritten",myvar.get() 
    please = myvar.get() 
    return please 

#trying to make the function return the textbox entry but fails 
attempt = mywarWritten() 
print "plz %s" % (attempt) 

#trying to just set it equal too but also fails 
python_variable = myvar.get() 
label = Label(root, textvariable=myvar) 
label.pack() 

text_entry = tk.Entry(root, textvariable=myvar) 
button1 = tk.Button(root, text="Back to Home", command=lambda: mywarWritten()) 
button1.pack() 
text_entry.pack() 

#trying attempt and pythonvariable in "normal python code" 
print attempt 
print pythonvariable 
root.mainloop() 

感謝您的幫助提前。

+0

分配給按鈕的函數無法返回值,因爲沒有人可以接收此變量。 'attempt = ...'和'python_variable = ...'行是無用的,因爲它們在'Entry'仍然empy時在腳本開始時執行。你必須知道,只有分配給'Button'或其他小部件的函數中的代碼纔有意義。函數以外的所有內容只能執行一次 - 在腳本開始時執行 - 僅用於構建GUI。 – furas

+0

謝謝,這很有道理。因此,我不應該試圖將文本輸入出來,而是應該將與該按鈕相關的我的函數(未顯示)正確? – HarleyH

+0

是的,你必須做一切功能。 – furas

回答

1

您似乎對範圍,進口,參考和功能有一些誤解。 myvar已經可以訪問了,你所要做的只是訪問它get()它。不要多次導入相同的模塊,並儘量避免使用from x import *。將值返回給按鈕沒有任何意義,也沒有任何作用。不是函數或類中的每行代碼都會立即執行,所以attempt = mywarWritten()以及其他幾次您在函數外部執行的所有操作都將在程序運行後立即得到該值StringVar,然後執行任何操作。而lambda: func()只是func

import Tkinter as tk 

root = tk.Tk() 
root.title("MyApp") 

myvar = tk.StringVar() 

def mywarWritten(*args): 
    print "mywarWritten", myvar.get() 

label = tk.Label(root, textvariable=myvar) 
label.pack() 

text_entry = tk.Entry(root, textvariable=myvar) 
button1 = tk.Button(root, text="Back to Home", command=mywarWritten) 
button1.pack() 
text_entry.pack() 

root.mainloop() 

要訪問該條目組件的內容任何時候,只要做myvar.get(),有這將是。

您也有mywarWritten而不是my_var_writtenvvar。總之,我非常強烈地推薦你閱讀official Python tutorial(並且使用Python 3,因爲它比Python 2更好)。

+0

我爲簡單的錯誤表示歉意。我曾嘗試過這麼多東西,它變得一團糟,但我不想刪除它,否則我會忘記我做了什麼。我嘗試了一下,但顯然忽略了一些東西。 – HarleyH