【问题标题】:Im trying to make a GUI app using tkinter and pysrt我正在尝试使用 tkinter 和 pysrt 制作一个 GUI 应用程序
【发布时间】:2021-08-12 05:38:02
【问题描述】:
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 中检索数据并根据用户的输入处理文件。 在我的代码中,我尝试直接输入一个文件并打开第二个窗口,该窗口使用 2 个组合框和两个按钮 INCREASE 和 DECREASE 给出选项分钟和秒,如果单击增加,它将重定向到一个从组合框并使用提供的功能增加 srt 文件中的时间 py 模块 pysrt 反之亦然,如果我单击减少。我目前被困在如何获得两个输入:(1)以秒和分钟为单位的时间和(2)增加或减少按钮并相应地调用函数。

【问题讨论】:

    标签: python class tkinter


    【解决方案1】:

    我要做的第一件事是重组你的代码。你在你拥有的 open 函数中做所有事情,这让你的生活变得复杂。此外,您消除了用户更改用于转换的 .srt 文件的可能性。

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

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

    然后将真正的魔法放在按下我建议的 保存 按钮时触发的事件上。在这里,您只需从 2 个组合框中获取值,然后根据这些值使用它来偏移字幕。

    现在,这实际上并不能正确回答您的问题,这是我很久以前处理完全相同的应用程序的方式。子计时真的可以s*ck donkeyballs :-|

    要真正回答您的问题,如果您想使用按钮和组合框,所需的逻辑会有所改变。您需要创建global variables 来保存分钟和秒,并考虑到如果秒设置为 59 并且用户按下 INCREASE 按钮秒,秒应重置为0 和分钟应该增加 1。当然,DECREASE 是相反的。 (1m0s --> 0m59s)。

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

    您可能还希望将事件绑定到正在更改的组合框本身。请参阅nbro 中的pydocsthis excellent answer

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

    一些旁注:

    • 您使用的分钟和秒范围对我来说似乎不正确。我会使用range(0,60),因为您需要0 的选项,而您不需要60 的选项(因为这将分别变为1 小时或1 分钟。考虑到您想修复字幕的时间,使用小时似乎很荒谬. 不过,使用毫秒似乎很有用。
    • 您应该能够处理负值。字幕不是早就是晚,按照现在的逻辑,只能处理字幕早的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-26
      相关资源
      最近更新 更多