我需要添加一个用户按下的按钮来启动Tkinter.ask目录,并能够捕获结果。我已经尝试了很多示例,但是找不到在我的特定情况下可以成功工作的任何东西(这种情况下我是新手,但实际上并不知道我在做什么:)
我已经注释掉了我所做的事情,以便原始代码仍然有效,因此您可以看到我一直在尝试的内容。由于我在Tk陌生的领域,所以大多数情况下都无法正常工作。任何帮助,不胜感激。
#!/usr/bin/env python
import Tkinter
from Tkinter import *
import Tkinter, tkFileDialog
class Values(Tkinter.Tk):
"""docstring for Values"""
def __init__(self, parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.grid()
stepOne = Tkinter.LabelFrame(self, text=" Create A Playlist ")
stepOne.grid(row=0, columnspan=7, sticky='W',padx=5, pady=5, ipadx=5, ipady=5)
# self.getAdir = tkFileDialog.askdirectory(parent=stepOne, title='Please select a directory')
self.Val1Lbl = Tkinter.Label(stepOne,text="Playlist Name")
self.Val1Lbl.grid(row=0, column=0, sticky='E', padx=10, pady=2)
self.Val1Txt = Tkinter.Entry(stepOne)
self.Val1Txt.grid(row=0, column=1, columnspan=4, pady=2, sticky='WE')
self.Val2Lbl = Tkinter.Label(stepOne,text="Task")
self.Val2Lbl.grid(row=1, column=0, sticky='E', padx=10, pady=2)
self.Val2Var = StringVar()
self.Val2Txt = Tkinter.OptionMenu(stepOne, self.Val2Var, 'Layout','Anim Pass 1','Anim Pass 2', 'Lighting', 'Compositing')
self.Val2Txt.grid(row=1, column=1, columnspan=4, pady=2, sticky='WE')
self.Val3Lbl = Tkinter.Label(stepOne,text="Description")
self.Val3Lbl.grid(row=2, column=0, sticky='E', padx=10, pady=2)
self.Val3Txt = Tkinter.Entry(stepOne)
self.Val3Txt.grid(row=2, column=1, columnspan=4, pady=2, sticky='WE')
# self.Val4Lbl = Tkinter.Label(stepOne,text="Directory")
# self.Val4Lbl.grid(row=3, column=0, sticky='E', padx=10, pady=2)
# self.Val4Var = StringVar()
# self.Val4Var = Tkinter.Button(command=getAdir)
# self.Val4Txt.grid(row=3, column=1, columnspan=4, pady=2, sticky='WE')
self.val1 = None
self.val2 = None
self.val3 = None
# self.val4 = None
SubmitBtn = Tkinter.Button(stepOne, text="Submit",command=self.submit)
SubmitBtn.grid(row=4, column=3, sticky='W', padx=5, pady=2)
def submit(self):
self.val1=self.Val1Txt.get()
if self.val1=="":
Win2=Tkinter.Tk()
Win2.withdraw()
self.val2=self.Val2Var.get()
if self.val2=="":
Win2=Tkinter.Tk()
Win2.withdraw()
self.val3=self.Val3Txt.get()
if self.val3=="":
Win3=Tkinter.Tk()
Win3.withdraw()
# self.val4=self.Val4Var.get()
# if self.val4=="":
# Win4=Tkinter.Tk()
# Win4.withdraw()
self.quit()
if __name__ == '__main__':
app = Values(None)
app.title('Bulk Movie Upload')
app.mainloop() #this will run until it closes
#Print the stuff you want.
print app.val1,app.val2,app.val3 #,app.val4
这是经过修改的代码,按照我的意思,但是仍然存在错误,因为它没有将变量传递出去。我已经编辑了这篇文章和代码,以简化操作。
#!/usr/bin/env python
import Tkinter
from Tkinter import *
import Tkinter, tkFileDialog
class Values(Tkinter.Tk):
"""docstring for Values"""
def __init__(self, parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def getAdir(self):
self.val5 = tkFileDialog.askdirectory(parent=self, title='Please select a directory')
def initialize(self):
self.grid()
stepOne = Tkinter.LabelFrame(self, text=" Create A Playlist ")
stepOne.grid(row=1, columnspan=8, sticky='W',padx=5, pady=5, ipadx=5, ipady=5)
self.Val5Lbl = Tkinter.Label(stepOne,text="Select Folder Containing Movies")
self.Val5Lbl.grid(row=4, column=0, sticky='E', padx=5, pady=2)
self.Val5Var = StringVar()
self.Val5Txt = Tkinter.Button(stepOne, text="Select Files", command=self.getAdir)
self.Val5Txt.grid(row=4, column=1, columnspan=4, pady=2, sticky='WE')
self.val5 = None
SubmitBtn = Tkinter.Button(stepOne, text="Submit",command=self.submit)
SubmitBtn.grid(row=6, column=3, sticky='W', padx=5, pady=2)
def submit(self):
self.val5=self.Val5Var.get()
if self.val5=="":
Win2=Tkinter.Tk()
Win2.withdraw()
self.quit()
if __name__ == '__main__':
app = Values(None)
app.title('Bulk Movie Upload')
app.mainloop() #this will run until it closes
#Print the stuff you want.
print "Folder is - " + app.val5
一个大问题是您要创建多个实例Tk
。你不能那样做。如果需要更多窗口,请创建实例Toplevel
。
要调用一个函数来请求目录,您需要创建一个函数,并将该函数绑定到一个按钮上。您所做的实际上是在创建其他窗口小部件之前调用该函数,而不是等待按钮按下。
def getAdir(self):
self.val4 = tkFileDialog.askdirectory(parent=stepOne, title='Please select a directory')
...
self.Val4Var = Tkinter.Button(self, command=self.getAdir)
注意:在我写完上面的内容之后,问题被更改为包含不同的代码。这是我对该代码的评论:
在修改后的代码中,您没有执行我在回答中建议的内容。您需要删除以下代码行:
self.val5=self.Val5Var.get()
那是因为self.val5
已经包含从返回的目录askdirectory
。这将是一个字符串,而不是带有get
方法的某种对象。
您还会继续遇到一个问题,即要打开多个根窗口。这将导致其他问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句