我的 tk 部分获取用户输入的文本(string1、string2、string3 和 string4),但不会将其传递到程序主部分中的 4 个变量。它确实提示输入文本项,但按钮不会关闭,并且打印语句不会执行。
我尝试了一个更简单的版本,包含 3 个文本条目,并且可以在主程序中打印这些内容。
def get_user_inputs():
#Prompts user for four strings, stores them in variables, and returns them.
root = Tk()
root.title("Enter Four Strings")
# String variables to store user input
string_var1 = StringVar()
string_var2 = StringVar()
string_var3 = StringVar()
string_var4 = StringVar()
# Labels and entry fields
label1 = Label(root, text="Enter string 1:")
label1.pack()
entry1 = Entry(root, textvariable=string_var1)
entry1.pack()
label2 = Label(root, text="Enter string 2:")
label2.pack()
entry2 = Entry(root, textvariable=string_var2)
entry2.pack()
label3 = Label(root, text="Enter string 3:")
label3.pack()
entry3 = Entry(root, textvariable=string_var3)
entry3.pack()
label4 = Label(root, text="Enter string 4:")
label4.pack()
entry4 = Entry(root, textvariable=string_var4)
entry4.pack()
# Button to retrieve input
def get_and_close():
string1 = string_var1.get()
string2 = string_var2.get()
string3 = string_var3.get()
string4 = string_var4.get()
return string1, string2, string3, string4 # Removed root.destroy() from here?
button = Button(root, text="Enter", command=get_and_close)
button.pack()
# Main event loop (after button definition)
root.mainloop() # Start event loop and wait for user input
# Retrieve user input after window closes
return get_and_close() # Call the get_and_close function
# Main program (outside the function)
string1, string2, string3, string4 = get_user_inputs() # Get user input
# assign text values to variables
date_range_dor= string1
output_filename = string2
post_filename = string3
post_filedate = string4
print("Date Range: ",date_range_dor)
print("Output Summary filename: ",output_filename)
print("Output POST filename: ",post_filename)
print("POST date variable: ",post_filedate)
您必须使用
global
变量来表示 string1, string2, string3, string4
。此外,一旦按 root.destroy()
,您需要使用 Enter
来关闭窗口。
按钮命令函数应该修改全局变量,而不是返回收集的变量,因为命令函数的返回值不会在任何地方访问。这些全局变量需要向下传递给 get_user_inputs()
和 get_and_close()
函数,以便可以被这些函数修改。这是修改后的代码,对我有用:
def get_user_inputs():
#Prompts user for four strings, stores them in variables, and returns them.
root = tk.Tk()
root.title("Enter Four Strings")
global string1,string2, string3, string4
# String variables to store user input
string_var1 = StringVar()
string_var2 = StringVar()
string_var3 = StringVar()
string_var4 = StringVar()
# Labels and entry fields
label1 = Label(root, text="Enter string 1:")
label1.pack()
entry1 = Entry(root, textvariable=string_var1)
entry1.pack()
label2 = Label(root, text="Enter string 2:")
label2.pack()
entry2 = Entry(root, textvariable=string_var2)
entry2.pack()
label3 = Label(root, text="Enter string 3:")
label3.pack()
entry3 = Entry(root, textvariable=string_var3)
entry3.pack()
label4 = Label(root, text="Enter string 4:")
label4.pack()
entry4 = Entry(root, textvariable=string_var4)
entry4.pack()
# Button to retrieve input
def get_and_close():
global string1,string2, string3, string4
string1 = string_var1.get()
string2 = string_var2.get()
string3 = string_var3.get()
string4 = string_var4.get()
root.destroy()
#return string1, string2, string3, string4 # Removed root.destroy() from here?.
#Commented out this return statement as the return values are not captured anywhere
button = Button(root, text="Enter", command=get_and_close)
button.pack()
# Main event loop (after button definition)
root.mainloop() # Start event loop and wait for user input
#Retrieve user input after window closes
return string1, string2, string3, string4 #Return the modified values
#return get_and_close() # Call the get_and_close function
#Main program (outside the function)
string1 = string2 = string3 = string4=None #initializing the variables with global scope
string1, string2, string3, string4 = get_user_inputs() # Get user input
# assign text values to variables
date_range_dor= string1
output_filename = string2
post_filename = string3
post_filedate = string4
print("Date Range: ",date_range_dor)
print("Output Summary filename: ",output_filename)
print("Output POST filename: ",post_filename)
print("POST date variable: ",post_filedate)
窗户:
控制台:
希望这有帮助!