【问题标题】:Getting Tcl error while working with python Tkinter command for GUI使用用于 GUI 的 python Tkinter 命令时出现 Tcl 错误
【发布时间】:2021-05-08 17:18:00
【问题描述】:

我正在开发一个 GUI,可以对用户输入的文件夹中的视频进行下采样。 这是基本框架: 1.On按钮点击用户输入视频的路径/目录 2.我有一个下采样函数,它接受用户的输入(路径)并对视频进行下采样。 编辑:我在相同的错误下看到了类似的答案,我已经尝试了解决方案,但它不起作用并且给出了不同的错误。所以,相反,我发布这个是为了避免混淆,并想学习如何解决这个特定的问题。 这就是我所拥有的:


from tkinter import * 
from tkinter.ttk import *

from tkinter.filedialog import askopenfile 

root = Tk() 
root.geometry('200x100') 

def open_file(): 
    file = askdirectory() 
    if file is not None:
        return file#add if directory is not correct option
btn = Button(root, text ='Open', command = lambda:open_file())
btn.pack(side = TOP, pady = 10) 
#mainloop() 
def downsamplevideos(open_file):
    for video in os.listdir(open_file):
        input_file_name=video
        (
            ffmpeg
            .input('/Users/lala/Desktop/checktwo/{}'.format(input_file_name))
            .filter_('scale', 640, 360)
            .output("/Users/lala/Desktop/videos/downsampleda{}".format(input_file_name))
            .run(capture_stdout=True, capture_stderr=True)
        )
btn2 = Button(root, text="Select",command=lambda:downsamplevideos(open_file()))
btn2.pack(side = TOP, pady = 10)


This is opening a window with two button. But it is not working, that is it is not downsampling. Can anyone help me with this implementation?

【问题讨论】:

  • 对于btn2,您将父级设置为master,这是未定义的。我认为您的意思是root,这可能是导致错误的原因
  • @Henry 谢谢你的指出。我在我的代码中编辑了它
  • @Henry 它不工作。你知道更多吗?
  • 这是下采样还是 tkinter 的问题?
  • @Henry 下采样功能单独工作。我无法与 tkinter 一起工作。窗口打开,然后我可以选择文件夹。它询问了两次然后它停止了。它不会降采样。

标签: python user-interface tkinter widget


【解决方案1】:

当您在按下打开按钮后调用open_file 时,文件路径不会存储在任何地方。这可以通过创建一个全局变量directory来解决,该变量将存储文件路径,以便在downsamplevideos中使用。

directory = None
def open_file(): 
    file = askdirectory() 
    if file is not None:
        global directory
        directory = file
btn = Button(root, text ='Open', command = lambda:open_file())
btn.pack(side = TOP, pady = 10) 
#mainloop() 
def downsamplevideos():
    global directory
    for video in os.listdir(directory):
        input_file_name=video
        (
            ffmpeg
            .input('/Users/lala/Desktop/checktwo/{}'.format(input_file_name))
            .filter_('scale', 640, 360)
            .output("/Users/lala/Desktop/videos/downsampleda{}".format(input_file_name))
            .run(capture_stdout=True, capture_stderr=True)
        )
btn2 = Button(root, text="Select",command=lambda:downsamplevideos())
btn2.pack(side = TOP, pady = 10) 

【讨论】:

  • 谢谢你:)) 这很好用:) 另外,我在 Tkinter 上学到了更多东西。再次感谢你!
  • 很高兴能帮上忙 :)
猜你喜欢
  • 2015-06-01
  • 2014-11-17
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-25
  • 1970-01-01
相关资源
最近更新 更多