从按钮生成问题目录

用户1978912

我需要添加一个用户按下的按钮来启动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
布莱恩·奥克利(Bryan Oakley)

一个大问题是您要创建多个实例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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

离子生成问题

来自分类Dev

Visual Basic生成问题

来自分类Dev

gnuplot密钥生成问题

来自分类Dev

快速日期生成问题

来自分类Dev

PHP JSON生成问题

来自分类Dev

MVC Web API路由生成问题

来自分类Dev

Visual Studio 2013生成问题

来自分类Dev

多行舵值对Yaml生成问题

来自分类Dev

Android GCM中的通知生成问题

来自分类Dev

动态extjs树面板生成问题

来自分类Dev

OpenCV生成问题Visual Studio 2013

来自分类Dev

Yii2 URL生成问题

来自分类Dev

生成问题后的Adobe AIR

来自分类Dev

Mac(Xamarin)上的VSTS生成代理中的生成问题

来自分类Dev

JBoss Eclipse集成问题-旧的Jboss目录正在加载

来自分类Dev

休眠一对一映射。模式生成问题

来自分类Dev

Android Chrome完整浏览器apk生成问题

来自分类Dev

Visual Studio社区2015更新1生成问题

来自分类Dev

Python 2.7 protobuf .py文件生成问题

来自分类Dev

Java中的二维条码生成问题

来自分类Dev

RSA公钥生成问题(PHP / Java集成)

来自分类Dev

十六进制生成问题从Java加密与And .NET

来自分类Dev

添加Localnotification插件后出现离子生成问题

来自分类Dev

Python 2.7 protobuf .py文件生成问题

来自分类Dev

节点 js setInterval 和 nohup 的进程生成问题

来自分类Dev

通过报告生成问题导出 Rhapsody Table View

来自分类Dev

EvanBetterAuthorizationSample集成问题

来自分类Dev

自动完成问题

来自分类Dev

tcsh完成问题