Python编写简单的谷歌翻译软件

这是我学习Python的图形模块tkinter时完成的一个小作业,翻译速度快,

直接调用Google翻译的Python接口,界面简洁,已成为我日常编程的小助手^^

图片.png

源码:

# -*- coding: utf-8 -*-

from googletrans import Translator
from tkinter import *
from tkinter import filedialog
import tkinter as tk
import os
import codecs

class Goo():
    def __init__(self):
        self.url = ['translate.google.cn']

    def translate(self, txt, lang):
        translator = Translator(service_urls=self.url)
        a = translator.translate(txt, dest=lang)
        return a.text


class App():
    def __init__(self):
        self.dirname = 'D:/gg/'
        self.basefile = 'D:/gg/dict_001.txt'
        self.data = {}

        self.init()
        self.initdata()

        root = Tk()
        root.geometry('290x280')
        root.resizable(width=False, height=False)
        root.title('ABC')
        root.iconbitmap('D:/py/g.ico')
        self.root = root

        self.goo = Goo()
        self.box()


        root.mainloop()

    def init(self):
        files = os.listdir(self.dirname)
        if len(files) == 0:
            f = codecs.open(self.basefile, 'w', 'utf-8')
            f.close
            return

        files.sort(key=lambda x: int(x[5:8]))
        tail = files[len(files) - 1]
        size = os.path.getsize(self.dirname+tail) / 1024 / 1024
        size = float('%.2f' % size)

        if size > 10:
            n = int(tail[5:8]) + 1
            if n<10:
                self.basefile = self.dirname+'dict_00'+str(n)+'.txt'
                f = codecs.open(self.basefile, 'w', 'utf-8')
                f.close
            elif n<100:
                self.basefile = self.dirname + 'dict_0' + str(n) + '.txt'
                f = codecs.open(self.basefile, 'w', 'utf-8')
                f.close
        else:
            self.basefile = self.dirname + tail

    def box(self):
        boxframe = Frame(self.root, width=60)
        boxframe.pack(fill=tk.Y, side=LEFT)

        textframe1 = Frame(boxframe, width=30)
        textframe1.pack(fill=tk.Y)

        y_scrollbar1 = Scrollbar(textframe1, orient=VERTICAL)

        #窗口1
        text1 = Text(textframe1, yscrollcommand=y_scrollbar1.set, width=30, height=4, bg='#cce8cf', font='"Lucida Console" 10',
                    spacing1=5, spacing2=5, spacing3=5, insertbackground='red', cursor='xterm')

        y_scrollbar1.config(command=text1.yview)
        y_scrollbar1.pack(side=RIGHT, fill=Y)

        text1.pack(padx=10, pady=14)
        self.text1 = text1

        # 窗口2
        btnframe = Frame(boxframe, width=20)
        btnframe.pack(fill=tk.X)

        btn1 = Button(btnframe, text='英译汉', command=self.prev)
        btn1.pack(ipadx=12, padx=10, pady=2, side=LEFT)

        btn2 = Button(btnframe, text='汉译英', command=self.next)
        btn2.pack(ipadx=12, padx=28, pady=2, side=RIGHT)

        # 窗口3
        textframe2 = Frame(boxframe, width=30)
        textframe2.pack(fill=tk.Y)

        y_scrollbar2 = Scrollbar(textframe2, orient=VERTICAL)

        text2 = Text(textframe2, yscrollcommand=y_scrollbar2.set, width=30, height=4, bg='#cce8cf', font='"Lucida Console" 10',
                     spacing1=5, spacing2=5, spacing3=5, insertbackground='red', cursor='xterm')

        y_scrollbar2.config(command=text2.yview)
        y_scrollbar2.pack(side=RIGHT, fill=Y)

        text2.pack(padx=10, pady=14)
        self.text2 = text2

    def next(self):
        y = self.text1.get(0.0, 'end').strip()
        if len(y) < 1:
            return

        x = self.data.get(y)
        if x is None:
            x = self.goo.translate(y, 'en').strip()

            self.data[y] = x

            self.text2.delete(0.0, 'end')
            self.text2.insert(0.0, x)

            f = codecs.open(self.basefile, 'a', 'utf-8')
            f.write(y + ' ~ ' + x + '
')
            f.close()
        else:
            self.text2.delete(0.0, 'end')
            self.text2.insert(0.0, x)

    def prev(self):
        y = self.text1.get(0.0, 'end').strip()
        if len(y) < 1:
            return

        x = self.goo.translate(y, 'zh-cn')

        self.text2.delete(0.0, 'end')
        self.text2.insert(0.0, x)

        v = self.data.get(x)
        if v is None:
            self.data[x] = y

            f = codecs.open(self.basefile, 'a', 'utf-8')
            f.write(x + ' ~ ' + y + '
')
            f.close()

    def initdata(self):
        files = os.listdir(self.dirname)
        files.sort(key=lambda x: int(x[5:8]))

        for f in files:
            z = codecs.open(self.dirname + f, 'r', 'utf-8')
            while True:
                line = z.readline()
                if len(line) == 0:
                    break

                if len(line.strip()) < 1:
                    continue

                dc = line.strip().split(' ~ ')
                self.data[dc[0]] = dc[1]


app = App()


上一篇:轻松优雅地访问谷歌搜索

下一篇:Mybatis批量操作配置文件UserMapper.xml