1. 程式人生 > 實用技巧 >利用Python製作翻譯小工具

利用Python製作翻譯小工具

話不多說,直接上程式碼。

Component檔案:

# coding:utf-8
from tkinter import *
from tkinter import ttk
from tkinter import scrolledtext
import tkinter.messagebox

# 作者:C丶小明
# 部落格園地址:https://www.cnblogs.com/mingmingming/

url = "請選擇"
class Comp:
    def __init__(self,master):
        self.master = master
    
    def label(self,properties,padx = 3,pady = 2,ipadx = 5,ipady = 1):
        for name,x,y in properties:
            self.label = Label(self.master,text = name)
            self.label.grid(row = x,column = y,padx = padx,pady = pady,ipadx = ipadx,ipady = ipady)
    
    def entry(self,properties,padx = 3,pady = 2,ipadx = 5,ipady = 1,columnspan = 4,sticky = N):
        self.boxes = []
        for width,insert,x,y in properties:
            self.entry  = Entry(self.master,width = width)
            self.entry.insert(END,insert)
            self.entry.grid(row = x,column = y,columnspan = columnspan,padx = padx,pady = pady,ipadx = ipadx,ipady = ipady,sticky = sticky)
            self.boxes.append(self.entry)
            
    def get_entry(self):
        self.get_data = []
        for box in self.boxes:
            self.data = box.get()
            self.get_data.append(self.data)
        return self.get_data

    def button(self,properties,padx = 1,pady = 2,ipadx = 2,ipady = 1):
        for text,x,y,command in properties:
            self.button = Button(self.master,text = text,command = command)
            self.button.grid(row = x,column = y,padx = padx,pady = pady,ipadx = ipadx,ipady = ipady)

    def button_cancel(self):
        self.master.destroy()

            
    def scrolledtext(self,width,height,x,y,padx = 8,pady = 8,ipadx = 5,ipady = 1):
        self.scrolledtext = scrolledtext.ScrolledText(self.master,width = width,height = height)     
        self.scrolledtext.grid(row = x,column = y,columnspan = 5,padx = padx,pady = pady,ipadx = ipadx,ipady = ipady)

    def scrolledtext_insert(self,getdata_function):
        #for data in getdata_function:
        self.scrolledtext.insert(END,getdata_function)

    def scrolledtext_delete(self):
        #for data in getdata_function:
        self.scrolledtext.delete('1.0', 'end')

    def combobox(self,values,x,y,width = 35,columnspan = 5,padx = 3,pady = 1,ipadx = 5,ipady = 1,sticky = N):
        self.select = ttk.Combobox(self.master,width = width,state = 'readonly') # 初始化
        self.select['values'] = (values)  # 選項
        
        # 處理事件
        def combobox_trigger(*args):
            global url
            url = self.select.get()    #獲取選中的值

        self.select.set(url)    # 下拉框提示文字    
        #self.select.current(0)  # 預設選項        
        self.select.bind("<<ComboboxSelected>>",combobox_trigger)  # 選擇觸發事件
        self.select.grid(row = x, column = y,columnspan = columnspan,padx = padx,pady = pady,ipadx = ipadx,ipady = ipady,sticky = sticky)
        return url
   
    def messagebox(self , features , check1 , check1_return):
        if check1 in features:
            tkinter.messagebox.showinfo('提示',check1_return)
        else:
            tkinter.messagebox.showwarning('提示','新增失敗!')

    def radiobutton(self,properties,sticky = W):
        var = IntVar()
        for text,x,y,value in properties:
            radiobutton = Radiobutton(self.master, text= text, variable = var, value = value)
            radiobutton.grid(row = x,column = y ,columnspan = 4,sticky = sticky)
            radiobutton.flash()

if __name__ == "__main__":
    kk = Tk()
    c = Comp(kk)
    c.combobox(("select1","select2"),1,0)

    kk.mainloop()

  

TranslationTools檔案,翻譯小工具的主要部分:

# -*- coding: utf-8 -*-
from docx import Document
from tkinter import *
from googletrans import Translator
import tkinter.filedialog
import Component

# 作者:C丶小明
# 部落格園地址:https://www.cnblogs.com/mingmingming/


class Tr:
    def __init__(self):
        self.main = Tk()
        self.mainwindow = Component.Comp(self.main)
        self.main.geometry('430x400')
        self.main.title(u"翻譯工具      作者:C丶小明")
        self.main.resizable(width=False,height=False)
        self.translator = Translator(['translate.google.cn'])

    def returnselect(self):
        all_url = ("zh-CN","en")
        url = self.mainwindow.combobox(("zh-CN","en"),0,1,pady = 25)
        return False if url == "請選擇" else url


    def interface(self):
        # 文字
        self.mainwindow.label([
            ("翻譯語言:",0,0),
            ("選擇文件路徑:",1,0),
            ("文件行數:",2,0),
            ("翻譯文件位置:",3,0),
            ])
        # 下拉列表
        Language = self.mainwindow.combobox(("zh-CN","en"),0,1,pady = 25)
        
        path = StringVar()
        def selectPath():
            # 檔案選擇框
            path_ = tkinter.filedialog.askopenfilename(filetypes=[("",".docx")])            
            # path = StringVar() 配合使用,更新顯示地址
            path.set(path_)
            # 選擇文件的路徑
            t = path_
            # 開啟文件,空白為新建文件
            new_word = Document()
            document = Document(t)

            sum_row = len(document.paragraphs)
            Label(self.main,text = sum_row).grid(row = 2,column = 1,padx = 8)
            
            # 迴圈讀取段落
            for i in document.paragraphs:
                # 讀取內容,進行翻譯
                word_text = self.translator.translate(i.text, dest=self.returnselect()).text
                # 翻譯內容寫入文件
                new_word.add_paragraph(word_text)
            newpath = r"F:\翻譯文件.docx"
            new_word.save(newpath)
            Label(self.main,text = newpath).grid(row = 3,column = 1)
                
        # 顯示選擇檔案地址
        Label(self.main,width =35,height = 3,wraplength = 230,textvariable = path).grid(row = 1,column = 1,padx = 8)
        # 按鈕
        self.mainwindow.button([
            ("選擇",1,2,selectPath)
            ],ipadx = 8,ipady = 1)
        self.main.mainloop()



if __name__ == "__main__":
    t = Tr()
    t.interface()

執行結果: