首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我试着用tkinter和pysrt制作一个GUI应用程序

我试着用tkinter和pysrt制作一个GUI应用程序
EN

Stack Overflow用户
提问于 2021-05-23 18:35:37
回答 1查看 66关注 0票数 0
代码语言:javascript
复制
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()

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-23 20:20:29

我要做的第一件事就是重组你的代码。在开放函数中,您正在做所有事情,这会使您的生活更加复杂。此外,您还消除了用户更改用于转换的.srt文件的可能性。

我会使用一个表单来包含所有的控件。

  1. 按钮选择.srt文件
  2. 分钟的组合框
  3. 组合框几秒钟
  4. 保存按钮

然后,在按下我建议的保存按钮时触发的事件上使用实际的魔力。在这里,您只需要从两个组合框中获取值,并使用它来根据这些值来抵消字幕。

现在,这并不能很好地回答你的问题,这是我很久以前处理同一个应用程序的方式。小时刻刻的人真的可以做些什么?

要真正回答您的问题,如果您想使用按钮和组合框,所需的逻辑就会发生一些变化。您将需要创建全局变量来保存分钟和秒,并考虑到如果秒设置为59,用户按下递增按钮数秒,秒应重置为0,分钟应增加1。当然,减少也是相反的。(1mS-> 0m59s)。

按钮的逻辑应该转到不同的函数,就像对打开的按钮和函数一样。就像在实例化打开函数时使用command关键字绑定它们一样。将逻辑放入其中,以更新全局分钟和秒变量,并使用combobox.set(value) (文档)更新combobox值。

您还可能希望将事件绑定到正在更改的组合框本身。参见来自pydocs这个极好的答案nbro

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

一些旁注:

  • 在我看来,你用于分钟和秒的范围似乎是不正确的。我将使用range(0,60),因为您需要0选项,而不需要60选项(因为这将分别变成1小时或1分钟)。考虑到你想要安排字幕的时间,使用时间似乎是先入为主的。不过,使用毫秒似乎是有用的。
  • 你应该能够处理负值。字幕可以是早的,也可以是晚的,根据当前的逻辑,您只能处理字幕提前的情况。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67663191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档