Python 我正在尝试使用tkinter和pysrt制作GUI应用程序

Python 我正在尝试使用tkinter和pysrt制作GUI应用程序,python,class,tkinter,Python,Class,Tkinter,我正在尝试构建一个应用程序,它同步一个srt文件,并在从用户输入同步字幕文件的时间后创建一个新文件。我目前一直在研究如何从两个组合框中检索数据,并根据用户的输入处理文件。 在我的代码中,我尝试直接输入一个文件,并打开了第二个窗口,该窗口使用两个组合框和两个按钮增加和减少分钟和秒,如果单击增加,它将重定向到一个函数,该函数从组合框获取输入,并使用模块pysrt提供的函数增加srt文件中的时间,如果单击减少,则反之亦然。目前,我一直在研究如何获取这两个输入:(1)以秒和分钟为单位的时间,(2)增加或

我正在尝试构建一个应用程序,它同步一个srt文件,并在从用户输入同步字幕文件的时间后创建一个新文件。我目前一直在研究如何从两个组合框中检索数据,并根据用户的输入处理文件。
在我的代码中,我尝试直接输入一个文件,并打开了第二个窗口,该窗口使用两个组合框和两个按钮增加和减少分钟和秒,如果单击增加,它将重定向到一个函数,该函数从组合框获取输入,并使用模块pysrt提供的函数增加srt文件中的时间,如果单击减少,则反之亦然。目前,我一直在研究如何获取这两个输入:(1)以秒和分钟为单位的时间,(2)增加或减少按钮,并相应地调用函数。

我要做的第一件事是重新构造您的代码。你所做的一切都是在你拥有的open功能中进行的,这会使你的生活复杂化。此外,您还可以消除用户更改用于转换的.srt文件的可能性

我将使用1个表单来包含所有控件

  • 按钮选择.srt文件
  • 分钟组合框
  • 秒的组合框
  • 保存按钮
  • 然后在按下我建议的保存按钮时触发的事件上施加实际的魔法。在这里,您只需从2个组合框中获取值,并使用它根据这些值偏移字幕

    现在,这并不能正确回答你的问题,这是我很久以前处理完全相同的应用程序的方式。子计时真的可以让驴子玩键盘球:-|

    要真正回答您的问题,如果您想使用按钮和组合框,所需的逻辑会发生一些变化。您需要创建以保持分钟和秒数,并考虑到如果秒数设置为59,并且用户按下增加按钮持续秒数,则秒数应重置为0,分钟数应增加1。当然,减少的情况正好相反。(1m0s-->0m59s)

    按钮的逻辑应该转到单独的功能,就像打开按钮和功能一样。在实例化它们时,使用
    命令
    关键字绑定它们,就像对打开功能所做的一样。将逻辑放入其中以更新全局分钟和秒变量,并使用
    combobox.set(value)
    ()更新combobox值

    您可能还希望将事件绑定到正在更改的组合框本身。见和自

    最后,您仍然需要一个保存按钮来实际更新.srt文件中的值

    一些旁注:

    • 对我来说,你使用的分钟和秒的范围似乎不正确。我会使用
      范围(0,60)
      ,因为你需要
      0
      的选项,而你不需要
      60
      的选项(因为这将分别变成1小时或1分钟。考虑到你想确定字幕的计时,使用小时似乎很合适。不过使用毫秒似乎很有用
    • 你应该能够处理负值。字幕要么早要么晚,按照当前逻辑,你只能处理字幕早的情况
    from tkinter import filedialog, font
    from  tkinter import *
    from tkinter import ttk
    root = Tk()
    root.geometry("300x100")
    root.title("SRT")
    root.resizable(False, False)
    frame = Frame(root)
    frame.grid(column=1, row =0)
    def open():
        b.destroy()
        filename1 =  filedialog.askopenfilename(filetypes=[("SRT files(*.srt)", "*.srt")],initialdir = "/", title = "Select file")
        root.geometry("775x300")
        k=Label(frame,text="SELECTED SUBTITLE",font=("Times New Roman", 15)).grid(column=3, row =0)
        y=Label(frame,text=filename1,font=("Times New Roman", 12)).grid(column=3, row =1)
        seconds=Label(root, font=("Times New Roman", 15),text="Seconds").grid(column=2,row=2)
        minutes=Label(root, font=("Times New Roman", 15),text="Minutes").grid(column=0,row=2,ipadx=20)
        minuteselect = StringVar()
        minutes = ttk.Combobox(root, textvariable=minuteselect)
        minutes['values']=tuple([i for i in range(1,61)])
        minutes['state'] = 'readonly' 
        minutes.grid(column=0,row=4,padx=10)
        secondselect = StringVar()
        seconds = ttk.Combobox(root, textvariable=secondselect)
        seconds['values']=tuple([i for i in range(1,61)])
        seconds['state'] = 'readonly' 
        seconds.grid(column=2,row=4)
        plus =Button(root,text="DECREASE", width='10', height='1').place(x=400,y=150)
        minus =Button(root,text="INCREASE", width='10', height='1').place(x=280,y=150)
    b =Button(frame,text="Select The Subtitle", width='30', height='1',command=open)
    b.grid(row=1, column=1,padx=41,pady=30)
    b.rowconfigure(1, weight=1)
    b.columnconfigure(1, weight=1)
    root.mainloop()