[英]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.