[英]Im trying to make a GUI app using tkinter and pysrt
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 中检索数据并根据用户的输入处理文件。 在我的代码中,我尝试直接输入一个文件并打开第二个 window,它使用 2 个组合框和两个按钮 INCREASE 和 DECREASE 提供选项分钟和秒,如果单击增加,它将重定向到 function,它从combobox 并使用 py 模块 pysrt 提供的功能增加 srt 文件中的时间,反之亦然,如果我单击减少。 我目前被困在如何获得两个输入:(1)以秒和分钟为单位的时间和(2)增加或减少按钮并相应地调用函数。
我要做的第一件事是重组你的代码。 您在您拥有的开放function 中做所有事情,这使您的生活复杂化。 此外,您消除了用户更改用于转换的 .srt 文件的可能性。
我会使用 1 个表单来包含所有控件。
然后将实际的魔法放在按下我建议的保存按钮时触发的事件上。 在这里,您只需从 2 个组合框中获取值,然后根据这些值使用它来偏移字幕。
现在,这实际上并不能正确回答您的问题,这是我很久以前处理完全相同的应用程序的方式。 子时间真的可以s * ck donkeyballs:-|
要真正回答您的问题,如果您想使用按钮和组合框,所需的逻辑会有所改变。 您将需要创建全局变量来保存分钟和秒,并考虑到如果秒设置为 59 并且用户按下INCREASE按钮秒,秒应重置为 0,分钟应增加 1 . 当然,反之亦然。 (1m0s --> 0m59s)。
按钮的逻辑应该 go 来分隔功能,就像您对打开按钮和 function 所做的那样。 就像在实例化它们时使用command
关键字对open函数所做的那样绑定它们。 将逻辑放入其中以更新全局分钟和秒变量,并使用combobox.set(value)
( docs ) 更新 combobox 值。
您可能还希望将事件绑定到正在更改的组合框本身。 请参阅pydocs和来自nbro的出色答案
最后,您仍然需要一个保存按钮来实际更新 .srt 文件中的值。
一些旁注:
range(0,60)
因为你需要0
的选项而你不需要60
的选项(因为这将分别变为 1 小时或 1 分钟。考虑到你想修复字幕的时间,使用小时似乎很荒谬。不过,使用毫秒似乎很有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.