Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的GUI输入值在Tkinter中重复?_Python_Tkinter - Fatal编程技术网

Python 为什么我的GUI输入值在Tkinter中重复?

Python 为什么我的GUI输入值在Tkinter中重复?,python,tkinter,Python,Tkinter,我正在尝试创建一个简单的Tkinter应用程序,它将在指定目录中创建文件夹。例如,如果您给它前缀“folder_uu”,并且开始=1,结束=5,它将创建文件夹_1,文件夹_2,文件夹_3,文件夹_4,文件夹_5。我可以在以后理解这个逻辑,但是现在我很难理解为什么我在“开始”输入框中键入的内容会在“结束”输入框中重复。我在目录旁边创建了一个测试输入框,看到了同样的情况。我错过了什么 任何帮助都将不胜感激 编辑:问题在于声明变量startN和endN=int()。我将它们改为=IntVar(),现在

我正在尝试创建一个简单的Tkinter应用程序,它将在指定目录中创建文件夹。例如,如果您给它前缀“folder_uu”,并且开始=1,结束=5,它将创建文件夹_1,文件夹_2,文件夹_3,文件夹_4,文件夹_5。我可以在以后理解这个逻辑,但是现在我很难理解为什么我在“开始”输入框中键入的内容会在“结束”输入框中重复。我在目录旁边创建了一个测试输入框,看到了同样的情况。我错过了什么

任何帮助都将不胜感激

编辑:问题在于声明变量startN和endN=int()。我将它们改为=IntVar(),现在当我在GUI输入框中键入时,我可以为开始和结束输入不同的值。

[![Screensnip of GUI][1]][1]from tkinter import *
from tkinter import ttk
import folderNames as folders


root = Tk()
root.title("Create Folders")

mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)

directory = StringVar()
test = StringVar()
prefix = StringVar()
startN = int()
endN = int()

def calcFolders(*args):
    try:
        a = folders.getf(start_entry.get(), end_entry.get(), pref_entry.get())
        return(a)
    except ValueError:
        pass

dir_entry = ttk.Entry(mainframe, width=7, textvariable = directory)
dir_entry.grid(column=2, row=1, sticky=(W, E))

test_entry = ttk.Entry(mainframe, width=7, textvariable = test)
test_entry.grid(column=4, row=1, sticky=(W, E))

pref_entry = ttk.Entry(mainframe, width=7, textvariable = prefix)
pref_entry.grid(column=2, row=2, sticky=(W, E))

start_entry = ttk.Entry(mainframe, width=7, textvariable = startN)
start_entry.grid(column=2, row=3, sticky=(W, E))

end_entry = ttk.Entry(mainframe, width=7, textvariable = endN)
end_entry.grid(column=4, row=3, sticky=(W, E))

ttk.Label(mainframe, text="Directory").grid(column=1, row=1, sticky=E)
ttk.Label(mainframe, text="Prefix").grid(column=1, row=2, sticky=E)
ttk.Label(mainframe, text="Start").grid(column=1, row=3, sticky=E)
ttk.Label(mainframe, text="End").grid(column=3, row=3, sticky=E)
ttk.Button(mainframe, text="CREATE", command=calcFolders()).grid(column=1, row=4, sticky=N)



for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)

dir_entry.focus()
root.bind('<Return>', calcFolders())

root.mainloop()
tkinter导入的
[![Screensip of GUI][1]][1]*
从tkinter导入ttk
将folderNames导入为文件夹
root=Tk()
root.title(“创建文件夹”)
mainframe=ttk.Frame(根,padding=“3 3 12”)
grid(列=0,行=0,粘性=(N,W,E,S))
root.columnconfigure(0,权重=1)
rowconfigure(0,权重=1)
directory=StringVar()
test=StringVar()
前缀=StringVar()
startN=int()
endN=int()
def calcFolders(*参数):
尝试:
a=folders.getf(start\u entry.get()、end\u entry.get()、pref\u entry.get())
报税表(a)
除值错误外:
通过
dir\u entry=ttk.entry(大型机,宽度=7,文本变量=directory)
dir_entry.grid(列=2,行=1,粘性=(W,E))
test\u entry=ttk.entry(大型机,宽度=7,textvariable=test)
test_entry.grid(列=4,行=1,粘性=(W,E))
pref_entry=ttk.entry(大型机,宽度=7,文本变量=前缀)
pref_entry.grid(列=2,行=2,粘性=(W,E))
start\u entry=ttk.entry(大型机,宽度=7,文本变量=startN)
start_entry.grid(列=2,行=3,粘性=(W,E))
end_entry=ttk.entry(大型机,宽度=7,文本变量=endN)
end_entry.grid(列=4,行=3,粘性=(W,E))
ttk.Label(mainframe,text=“Directory”).grid(column=1,row=1,sticky=E)
ttk.Label(mainframe,text=“Prefix”).grid(column=1,row=2,sticky=E)
ttk.Label(mainframe,text=“Start”).grid(column=1,row=3,sticky=E)
ttk.Label(mainframe,text=“End”).grid(column=3,row=3,sticky=E)
ttk.Button(mainframe,text=“CREATE”,command=calcFolders()).grid(列=1,行=4,粘性=N)
对于mainframe.winfo_children():child.grid_配置(padx=5,pady=5)
dir_entry.focus()
root.bind(“”,calcFolders())
root.mainloop()

int()
生成数字0。它不会生成任何类型的Tkinter变量,这是唯一可以作为条目的
textvariable=
选项有意义地传递的内容。您需要
IntVar()
在那里。对于“test”和“directory”条目,问题在于您给了它们相同的Var,因此它们必然显示相同的值。
按钮
初始值设定项需要一个函数(以及
根.bind
)。所以我认为您应该使用
ttk.Button(mainframe,text=“CREATE”,command=calcFolders)
root.bind(“”,calcFolders)
。这是一个常见的问题,您不应该使用
()
。这是否回答了您的问题?使用IntVar()解决了这个问题。谢谢