Tkinter GUI 01
Tkinter GUI 02
Tkinter GUI 03
Tkinter GUI 04
Tkinter GUI 05
Tkinter GUI 06
Tkinter GUI 07
Tkinter GUI 08
教程1
教程2
软件使用指南与源码
来谈谈国际化吧,所谓国际化,就是将自己的程序,能过在菜单栏(或是其他地方),切换成其他语言。
由于断更了一下,我们抛弃前面章节的代码,重新写一个新的GUI:首先创建一个项目文件:
然后在项目文件中,新建一个 GUI 文件夹,并在下面添加一个 Tab1.py ,Tab2.py。再在项目文件夹下,添加一个 app.ico 图片,文件工作就算完毕了。
首先,打开 Tab1.py ,输入如下代码:
# coding: utf-8
import tkinter as tk
from tkinter import ttk
from sys import exit
from tkinter import scrolledtext
from tkinter import Menu
from Tab2 import *
class OOP:
def __init__(self):
self.win = tk.Tk()
self.win.resizable(0,0) #这个是设置窗口不可缩放
self._createWidget()
def _quit(): #设置一个 menu 菜单项的激活函数
win.quit() #退出
win.destroy() #销毁
exit() #结束程序
def _chi(self):
pass
def _jap(self):
pass
def _eng(self):
pass
def _getIptFileName(self):
pass
def _getOptFileName(self):
pass
def _screenShot(self):
pass
def _trans(self):
pass
def _flag(self):
pass
def _createWidget(self):
self.menuBar = Menu(self.win)
self.win.configure(menu=self.menuBar)
self.win.title('百变小T')
self.win.iconbitmap(r'../app.ico')
self.startMenu = Menu(self.menuBar,tearoff=0)
# pop menus:
self.I18NMenu = Menu(self.startMenu,tearoff=0) # 这个是 Menu 中的 Menu 了,可以一直这样嵌套下去
self.I18NMenu.add_command(label='中文',command=self._chi)
self.I18NMenu.add_command(label='日文',command=self._jap)
self.I18NMenu.add_command(label='英文',command=self._eng)
self.startMenu.add_cascade(label='语言切换',menu=self.I18NMenu)
self.startMenu.add_command(label='退出',command=self._quit)
self.menuBar.add_cascade(label='开始',menu=self.startMenu)
self.tabControl = ttk.Notebook(self.win)
self.tab1 = ttk.Frame(self.tabControl)
self.tab2 = ttk.Frame(self.tabControl)
self.tabControl.add(self.tab1,text='图像转文字')
self.tabControl.add(self.tab2,text='PDF转Word')
self.tabControl.pack(fill='both',expand=1)
self.zhuo = ttk.Frame(self.tab1)
self.zhuo.grid(column=0,row=0)
# 文件管理栏目
self.inOutFrm = ttk.Frame(self.zhuo)
self.inOutFrm.grid(column=0,row=0,sticky='W')
self.inBut = ttk.Button(self.inOutFrm,text='输入图片',
command=self._getIptFileName)
self.inBut.grid(column=0,row=0)
self.inEry = ttk.Entry(self.inOutFrm,width=60)
self.inEry.grid(column=1,row=0)
self.outBut = ttk.Button(self.inOutFrm,text='输出到',
command=self._getOptFileName)
self.outBut.grid(column=0,row=1)
self.outEry = ttk.Entry(self.inOutFrm,width=60)
self.outEry.grid(column=1,row=1)
for child in self.inOutFrm.winfo_children():
child.grid_configure(padx=6,pady=6,sticky='W')
#截图与转换按钮
self.butFrm = ttk.Frame(self.zhuo)
self.butFrm.grid(column=0,row=1,sticky='W',pady=6)
self.printScrBut = ttk.Button(self.butFrm,text='截图',
command=self._screenShot)
self.printScrBut.grid(column=0,row=0)
self.transBut = ttk.Button(self.butFrm,text='转换',
command=self._trans)
self.transBut.grid(column=1,row=0)
self.iptBut = ttk.Button(self.butFrm,text='直接从截图中输入',
command=self._flag)
self.iptBut.grid(column=2,row=0)
for child in self.butFrm.winfo_children():
child.grid_configure(padx=6,pady=6,sticky='W')
#滑动文字展示栏
self.printOptFrm = ttk.LabelFrame(self.zhuo,text='文字输出')
self.printOptFrm.grid(row=2,column=0,sticky='W')
self.scrTxt = scrolledtext.ScrolledText(self.printOptFrm,height=20,width=70,wrap=tk.WORD)
self.scrTxt.grid(row=0,column=0,sticky='W',padx=6,pady=6)
self.tab2Widget = Tab2(self.tab2)
oop = OOP()
oop.win.mainloop()
在 Tab2.py 文件中,输入如下代码:
# coding: utf-8
import tkinter as tk
from tkinter import ttk
import tkinter as tk
from tkinter import ttk
from PIL import ImageTk,Image
class Tab2():
def __init__(self,tab):
self._createWidget(tab)
def _getIptFileName(self):
pass
def _getOptFileName(self):
pass
def _trans(self):
pass
def _createWidget(self,tab):
self.zhuo = ttk.Frame(tab)
self.zhuo.grid(row=0,column=0)
# 文件管理栏目
self.inOutFrm = ttk.Frame(self.zhuo)
self.inOutFrm.grid(column=0,row=0,sticky='W')
self.inBut = ttk.Button(self.inOutFrm,text='输入图片',
command=self._getIptFileName)
self.inBut.grid(column=0,row=0)
self.inEry = ttk.Entry(self.inOutFrm,width=60)
self.inEry.grid(column=1,row=0)
self.outBut = ttk.Button(self.inOutFrm,text='输出到',
command=self._getOptFileName)
self.outBut.grid(column=0,row=1)
self.outEry = ttk.Entry(self.inOutFrm,width=60)
self.outEry.grid(column=1,row=1)
for child in self.inOutFrm.winfo_children():
child.grid_configure(padx=6,pady=6,sticky='W')
#截图与转换按钮
self.butFrm = ttk.Frame(self.zhuo)
self.butFrm.grid(column=0,row=1,sticky='W',pady=6)
self.transBut = ttk.Button(self.butFrm,text='转换',
command=self._trans)
self.transBut.grid(column=1,row=0)
for child in self.butFrm.winfo_children():
child.grid_configure(padx=6,pady=6,sticky='W')
我们看到,现在我们的程序是中文的。那么,如何按一下按钮,就切换成其他语言呢?
首先在 GUI 下新建一个 I18N.py ,把代码中,所有用到的字符串,设置成属性,然后分别根据条件,输入不同的语言,如下:
class I18N():
'''Internationalization'''
def __init__(self, language):
if language == 'chi': self.resourceLagChi()
elif language == 'eng': self.resourceLagEng()
elif language == 'jap': self.resourceLagJap()
def resourceLagChi(self):
self.labChi = '中文'
self.labEng = '英文'
self.labJap = '日文'
self.labTrans = '切换语言'
self.labQuit = '退出'
self.labStart = '开始'
self.labTab1 = '图片转文字'
self.labTab2 = 'PDF转文字'
self.inBut = '输入图片'
self.inButTab2 = '输入文件'
self.outBut = '输出到'
self.printScrBut = '截图'
self.transBut = '转换'
self.iptBut = '从截图中转换'
self.printOptFrm = '文字输出'
def resourceLagEng(self):
self.labChi = 'Chinese'
self.labEng = 'English'
self.labJap = 'Japanese'
self.labTrans = 'Change Language'
self.labQuit = 'Quit'
self.labStart = 'Start'
self.labTab1 = 'Img2Txt'
self.labTab2 = 'PDF2Txt'
self.inBut = 'Import Image'
self.inButTab2 = 'Import File'
self.outBut = 'Save to'
self.printScrBut = 'ScreenShot'
self.transBut = 'Transform'
self.iptBut = 'Transform from ScreenShot'
self.printOptFrm = 'Text Preview'
def resourceLagJap(self):
self.labChi = '中国語'
self.labEng = '英語'
self.labJap = '日本語'
self.labTrans = '言語を選択する'
self.labQuit = '閉じる'
self.labStart = '始め'
self.labTab1 = '映像転送文字'
self.labTab2 = 'PDF転送文字'
self.inBut = '画像を導入する'
self.inButTab2 = '文書を導入する'
self.outBut = '保存から'
self.printScrBut = 'キャプチャー'
self.transBut = 'へんかん'
self.iptBut = 'スクリーンショットから切り替える
self.printOptFrm = 'ぷれびゅー'
之后,修改 Tab1.py 代码,将所有的 字符串,用 I18N 的实例的属性来表示:
# coding: utf-8
import tkinter as tk
from tkinter import ttk
from sys import exit
from tkinter import scrolledtext
from tkinter import Menu
from Tab2 import *
from I18N import *
class OOP:
def __init__(self):
self.win = tk.Tk()
self.win.resizable(0,0) #这个是设置窗口不可缩放
self.i18n = I18N('chi')
self._createWidget()
def _quit(): #设置一个 menu 菜单项的激活函数
win.quit() #退出
win.destroy() #销毁
exit() #结束程序
def _chi(self):
self.win.destroy()
self.win = tk.Tk()
self.win.resizable(0,0) #这个是设置窗口不可缩放
self.i18n = I18N('chi')
self._createWidget()
def _jap(self):
self.win.destroy()
self.win = tk.Tk()
self.win.resizable(0,0) #这个是设置窗口不可缩放
self.i18n = I18N('jap')
self._createWidget()
def _eng(self):
self.win.destroy()
self.win = tk.Tk()
self.win.resizable(0,0) #这个是设置窗口不可缩放
self.i18n = I18N('eng')
self._createWidget()
def _getIptFileName(self):
pass
def _getOptFileName(self):
pass
def _screenShot(self):
pass
def _trans(self):
pass
def _flag(self):
pass
def _createWidget(self):
self.menuBar = Menu(self.win)
self.win.configure(menu=self.menuBar)
self.win.title(self.i18n.title)
self.win.iconbitmap(r'../app.ico')
self.startMenu = Menu(self.menuBar,tearoff=0)
# pop menus:
self.I18NMenu = Menu(self.startMenu,tearoff=0) # 这个是 Menu 中的 Menu 了,可以一直这样嵌套下去
self.I18NMenu.add_command(label=self.i18n.labChi,command=self._chi)
self.I18NMenu.add_command(label=self.i18n.labJap,command=self._jap)
self.I18NMenu.add_command(label=self.i18n.labEng,command=self._eng)
self.startMenu.add_cascade(label=self.i18n.labTrans,menu=self.I18NMenu)
self.startMenu.add_command(label=self.i18n.labQuit,command=self._quit)
self.menuBar.add_cascade(label=self.i18n.labStart,menu=self.startMenu)
self.tabControl = ttk.Notebook(self.win)
self.tab1 = ttk.Frame(self.tabControl)
self.tab2 = ttk.Frame(self.tabControl)
self.tabControl.add(self.tab1,text=self.i18n.labTab1)
self.tabControl.add(self.tab2,text=self.i18n.labTab2)
self.tabControl.pack(fill='both',expand=1)
self.zhuo = ttk.Frame(self.tab1)
self.zhuo.grid(column=0,row=0)
# 文件管理栏目
self.inOutFrm = ttk.Frame(self.zhuo)
self.inOutFrm.grid(column=0,row=0,sticky='W')
self.inBut = ttk.Button(self.inOutFrm,text=self.i18n.inBut,
command=self._getIptFileName)
self.inBut.grid(column=0,row=0)
self.inEry = ttk.Entry(self.inOutFrm,width=60)
self.inEry.grid(column=1,row=0)
self.outBut = ttk.Button(self.inOutFrm,text=self.i18n.outBut,
command=self._getOptFileName)
self.outBut.grid(column=0,row=1)
self.outEry = ttk.Entry(self.inOutFrm,width=60)
self.outEry.grid(column=1,row=1)
for child in self.inOutFrm.winfo_children():
child.grid_configure(padx=6,pady=6,sticky='W')
#截图与转换按钮
self.butFrm = ttk.Frame(self.zhuo)
self.butFrm.grid(column=0,row=1,sticky='W',pady=6)
self.printScrBut = ttk.Button(self.butFrm,text=self.i18n.printScrBut,
command=self._screenShot)
self.printScrBut.grid(column=0,row=0)
self.transBut = ttk.Button(self.butFrm,text=self.i18n.transBut,
command=self._trans)
self.transBut.grid(column=1,row=0)
self.iptBut = ttk.Button(self.butFrm,text=self.i18n.iptBut,
command=self._flag)
self.iptBut.grid(column=2,row=0)
for child in self.butFrm.winfo_children():
child.grid_configure(padx=6,pady=6,sticky='W')
#滑动文字展示栏
self.printOptFrm = ttk.LabelFrame(self.zhuo,text=self.i18n.printOptFrm)
self.printOptFrm.grid(row=2,column=0,sticky='W')
self.scrTxt = scrolledtext.ScrolledText(self.printOptFrm,height=20,width=70,wrap=tk.WORD)
self.scrTxt.grid(row=0,column=0,sticky='W',padx=6,pady=6)
self.tab2Widget = Tab2(self.tab2,self.i18n)
oop = OOP()
oop.win.mainloop()
同样地,也要修改 Tab2:
# coding: utf-8
import tkinter as tk
from tkinter import ttk
import tkinter as tk
from tkinter import ttk
from PIL import ImageTk,Image
class Tab2():
def __init__(self,tab,i18n):
self._createWidget(tab,i18n)
def _getIptFileName(self):
pass
def _getOptFileName(self):
pass
def _trans(self):
pass
def _createWidget(self,tab,i18n):
self.zhuo = ttk.Frame(tab)
self.zhuo.grid(row=0,column=0)
# 文件管理栏目
self.inOutFrm = ttk.Frame(self.zhuo)
self.inOutFrm.grid(column=0,row=0,sticky='W')
self.inBut = ttk.Button(self.inOutFrm,text=i18n.inButTab2,
command=self._getIptFileName)
self.inBut.grid(column=0,row=0)
self.inEry = ttk.Entry(self.inOutFrm,width=60)
self.inEry.grid(column=1,row=0)
self.outBut = ttk.Button(self.inOutFrm,text=i18n.outBut,
command=self._getOptFileName)
self.outBut.grid(column=0,row=1)
self.outEry = ttk.Entry(self.inOutFrm,width=60)
self.outEry.grid(column=1,row=1)
for child in self.inOutFrm.winfo_children():
child.grid_configure(padx=6,pady=6,sticky='W')
#截图与转换按钮
self.butFrm = ttk.Frame(self.zhuo)
self.butFrm.grid(column=0,row=1,sticky='W',pady=6)
self.transBut = ttk.Button(self.butFrm,text=i18n.transBut,
command=self._trans)
self.transBut.grid(column=1,row=0)
for child in self.butFrm.winfo_children():
child.grid_configure(padx=6,pady=6,sticky='W')