我如何使Tkinter入门小部件数据可用于其他功能
问题描述:
我花了很多时间试图用此代码中的简单入门小部件替换askinteger和askstring小部件。我相信有一种简单的方法可以将来自入口小部件的信息传递给代码中的其他函数,但我所研究和尝试的所有内容都失败了。任何帮助将是非常受欢迎的。我如何使Tkinter入门小部件数据可用于其他功能
from tkinter import *
from tkinter.simpledialog import askinteger
from tkinter.simpledialog import askstring
from random import randrange
def read_file(words_file):
with open(words_file, 'r') as f: # Read the text file
wordList = [] # Create an empty string called wordList
for line in f: # For every line in the text file
wordList += line.split() # Add another item to the list
f.close()
return wordList # Return the list
def select_word(wordList, word):
wordLength = 0
length = askinteger("Letters", "How Many Letters?") # Ask user for amount of letters
while wordLength != length:
wordNumber = randrange(0, len(wordList)) # Randomly select a number between 0 and length of wordList
word = wordList[wordNumber] # Select a word from the list using wordNumber
word = word.upper()
wordLength = len(word) # Calculate the length of the selected word
return word
def get_letter():
letter = askstring("Please enter a letter", "Which letter would you like to try?")
letter = letter.upper() # Convert letter to uppercase
return letter
这是我试过的那种东西。我也使用了stringvar。
from tkinter import *
master = Tk()
e = Entry(master)
e.pack()
e.focus_set()
def callback():
print (e.get())
global fred
fred = e.get()
print(fred)
return fred
b = Button(master, text="get", width=10, command=callback)
b.pack()
print(fred)
mainloop()
谢谢您的建议。我现在尝试了以下方法,但仍然无法使print(fred)函数正常工作。我确信这是一个愚蠢的错误,但我不明白我做错了什么。
from tkinter import *
master = Tk()
e = Entry(master)
e.pack()
e.focus_set()
fred = '' # declare fred in the outer scope
def callback():
print (e.get())
fred = (e.get())
return fred # removed global statement as I understand they should be avoided
b = Button(master, text="get", width=10, command=callback)
b.pack()
print(fred)
mainloop()
答
您必须在外部范围中定义变量fred
才能检索它。 (还有其他的方式,但是这是你的代码是如何构建的):
from tkinter import *
master = Tk()
e = Entry(master)
e.pack()
e.focus_set()
fred = '' # declare fred in the outer scope
def callback():
print (e.get())
global fred
fred = e.get()
print(fred)
# return fred # as fred is global, returning it is optional
b = Button(master, text="get", width=10, command=callback)
b.pack()
mainloop()
fred
将包含来自entry
字段检索到的值,并作进一步处理
了'打印(弗雷德)可' (我删除了)在'mainloop()'启动后永远不会被调用;在回调之后,'fred'的值被设置为'entry'的值。如果你愿意,你可以用它来更新标签,或者做任何你喜欢的事情。 –