This repository has been archived on 2026-10-26. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
KNZ_GeoTrackLab/KNZ_Convert.py
T
KenanZhu111 9f2fada315 Update:2024/11/14
1. New added:Version choose
2. Correct:The format fault of convert
2024-11-14 11:45:49 +08:00

751 lines
34 KiB
Python

# @ File : KNZ_Convert.py
#
# Copyright (c) 2024 - 2024 KenanZhu. All Right Reserved.
#
# @ Author : KenanZhu
# @ Time : 2024/11/13
# @ Brief :
# :
# @ IDE : PyCharm
#
# ----------------------------------------------------------------------------------------
# ---SELF--- #
import rnx_convert as conv
# ---THRI--- #
import queue
import threading
import tkinter as tk
from tkinter import ttk
from PIL import ImageTk
from base64 import b64decode
from tkinter import filedialog
# ---------------------------------------------------------------------------------------
InPaths = []
#
I_Box_Counter=0
O_Box_Counter=0
#
I_Format_Rnx_List=0
I_RINEX_BoxList=['2.10','2.11','3.03','3.04','3.05']
O_Format_Rnx_List=0
O_RINEX_BoxList=['2.10','2.11','3.03','3.04','3.05']
# ---------------------------------------------------------------------------------------
def instanceOPT(parenthwnd, func):
OPTIONS(parenthwnd, func)
class CALLBACK:
@staticmethod
def Get_I_File(File_I_Box):
# -------------------------------------------------------------------------------
# >
# Method:
# Brief :
# Author: @KenanZhu All Right Reserved.
# -------------------------------------------------------------------------------
global I_Box_Counter
path = filedialog.askopenfilename(
title='RINEX OBS File',
filetypes=[('RINEX OBS File(*.o*.*.*obs.*.*d)', '*.*o;*.*obs;*.*d'),
('All Files', '*.*')]
)
if path and path not in File_I_Box['value']:
File_I_Box['value'] += (path,)
I_Box_Counter += 1
File_I_Box.current(I_Box_Counter)
@staticmethod
def Get_I_Files(Files_I_ShowText):
# -------------------------------------------------------------------------------
# >
# Method:
# Brief :
# Author: @KenanZhu All Right Reserved.
# -------------------------------------------------------------------------------
global InPaths
paths = filedialog.askopenfilenames(
title='RINEX OBS File',
filetypes=[('RINEX OBS File(*.o*.*.*obs.*.*d)', '*.*o;*.*obs;*.*d'),
('All Files', '*.*')]
)
for path in paths:
if path and path not in InPaths:
InPaths.append(path)
Files_I_ShowText.delete('1.0', 'end')
for path in InPaths:
Files_I_ShowText.insert('end', path + '\n')
@staticmethod
def Clear_I_Files(Files_I_ShowText):
# -------------------------------------------------------------------------------
# >
# Method:
# Brief :
# Author: @KenanZhu All Right Reserved.
# -------------------------------------------------------------------------------
global InPaths
InPaths.clear()
Files_I_ShowText.delete('1.0', 'end')
@staticmethod
def Get_O_Dir(File_O_Box):
# -------------------------------------------------------------------------------
# >
# Method:
# Brief :
# Author: @KenanZhu All Right Reserved.
# -------------------------------------------------------------------------------
global O_Box_Counter
path = filedialog.askdirectory()
if path and path not in File_O_Box['value']:
File_O_Box['value'] += (path + '/',)
O_Box_Counter += 1
File_O_Box.current(O_Box_Counter)
@staticmethod
def Enable_YN(File_O_ynVar, File_O_Box, File_O_Button):
# -------------------------------------------------------------------------------
# >
# Method:
# Brief :
# Author: @KenanZhu All Right Reserved.
# -------------------------------------------------------------------------------
if File_O_ynVar.get() == 0:
File_O_Box.config(state=tk.DISABLED)
File_O_Button.config(state=tk.DISABLED)
else:
File_O_Box.config(state=tk.NORMAL)
File_O_Button.config(state=tk.NORMAL)
def Dir_or_name_get(self, path, mode):
# -------------------------------------------------------------------------------
# >
# Method: Dir_or_name_get
# Brief : Get the filedir or filename form path
# Param : path : file path
# mode : 0==get file name & 1==get file dir
# Return: mode==0 return filename,mode==1 return file dir
# Author: @KenanZhu All Right Reserved.
# -------------------------------------------------------------------------------
global nameend, filename, filedir
match mode:
case 0:
path_len = len(path)
while path_len > 0:
sig = path[path_len - 1:path_len]
if sig == '\\' or sig == '/':
filename = path[path_len:]
return filename
path_len -= 1
case 1:
path_len = len(path)
while path_len > 0:
sig = path[path_len - 1:path_len]
if sig == '\\' or sig == '/':
filedir = path[:path_len]
return filedir
path_len -= 1
def Convert(
self,
Pro_style,
File_O_ynVar,
File_I_BoxVar,
File_O_BoxVar,
Convertcards,
Exec_Progress):
# -------------------------------------------------------------------------------
# >
# Method:
# Brief :
# Author: @KenanZhu All Right Reserved.
# -------------------------------------------------------------------------------
global InPaths
Counter=0
State_O=0
InPath=[]
ErrorMsg=''
OutDirec=''
out_path=''
Exec_Progress.config(value=0)
if Convertcards.index('current')==0:
if not File_I_BoxVar.get(): ErrorMsg+=' path'
else: InPath.append(File_I_BoxVar.get())
elif Convertcards.index('current')==1:
if not InPaths: ErrorMsg+=' path'
else: InPath=InPaths.copy()
if File_O_BoxVar.get(): OutDirec = File_O_BoxVar.get()
if not File_O_BoxVar.get():
if File_O_ynVar.get(): ErrorMsg+=' directory'
else : pass
if ErrorMsg:
ErrorMsg='Error : no'+ErrorMsg+' !'
Exec_Progress.config(value=0)
Pro_style.configure('text.Horizontal.TProgressbar', text=ErrorMsg)
return
###
resqueue = queue.Queue()
for in_path in InPath:
if OutDirec:
out_path=OutDirec+'COV-'+self.Dir_or_name_get(in_path,0)
if not OutDirec:
out_path=(self.Dir_or_name_get(in_path,1)+'COV-'+
self.Dir_or_name_get(in_path,0))
State_O+=conv._Convert_Un(in_path,
out_path,
I_RINEX_BoxList[I_Format_Rnx_List],
O_RINEX_BoxList[O_Format_Rnx_List],
resqueue)
Counter+=1
Exec_Progress.config(value=int(Counter*100/len(InPath)))
Pro_style.configure(
'text.Horizontal.TProgressbar',
text='Converting...%d/%d'%(Counter, len(InPath)))
if State_O<=len(InPath):
#Exec_Progress.config(value=0)
Pro_style.configure(
'text.Horizontal.TProgressbar',
text='Complete ! %d successful, %d fails'%(State_O, len(InPath)-State_O))
def _Convert(
self,
Pro_style,
File_O_ynVar,
File_I_BoxVar,
File_O_BoxVar,
Convertcards,
Exec_Progress):
T=threading.Thread(target=lambda :
self.Convert(
Pro_style,
File_O_ynVar,
File_I_BoxVar,
File_O_BoxVar,
Convertcards,
Exec_Progress
))
T.start()
@staticmethod
def Move_center(hwnd, win_x, win_y):
# -------------------------------------------------------------------------------
# >
# Method: Move_Ccenter
# Brief : Move the window to the center of screen.
# Param : hwnd : instance handle of window
# win_x: the x size of window
# win_y: the y size of window
# Return: none
# Author: @KenanZhu All Right Reserved.
# -------------------------------------------------------------------------------
position_x = int((hwnd.winfo_screenwidth() - win_x) / 2)
position_y = int((hwnd.winfo_screenheight() - win_y) / 2)
hwnd.geometry(f'{win_x}x{win_y}+{position_x}+{position_y}')
# noinspection PyProtectedMember
class MAINGUI:
def __init__(self, hwnd, func):
# init
# -------------------------------------------------------------------------------
self.hwnd=hwnd
self.func=func
self.Pro_style=None
self.ExecFrame=None
self.BatchFrame=None
self.SingleFrame=None
self.Convertcards=None
self.Exec_Progress=None
self.File_O_ynVar=tk.IntVar()
self.File_I_BoxVar=tk.StringVar()
self.File_O_BoxVar=tk.StringVar()
self.iconoptions=(b'AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOrq6v/q6ur/6urq/+rq6'
b'v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v+CgoL/dnZ2/1RUVP9UVFT/VFRU'
b'/1RUVP9UVFT/VFRU/1RUVP9UVFT/VFRU/1RUVP9UVFT/VFRU/3Z2dv+CgoL/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P'
b'/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/'
b'6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/4KCgv92dnb/VFRU/1RUVP9UVFT/VFRU/1RUVP9UVFT/VFRU/1RUVP9'
b'UVFT/VFRU/1RUVP9UVFT/dnZ2/4KCgv/Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8'
b'PDw//Dw8P/w8PD/8PDw//Dw8P/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6urqGAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAADq6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+r'
b'q6v/q6ur/goKC/3Z2dv9UVFT/VFRU/1RUVP9UVFT/VFRU/1RUVP9UVFT/VFRU/1RUVP9UVFT/VFRU/1RUVP92dnb/go'
b'KC/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw/8AA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//'
b'AAAAAAAAAAAAAAAAAAD//wAA//8AAAAAAAAAAAAAAAAAAP//AAD/fwAAAAAAAAAAAAAAAAAA//8AAA==')
self.iconoptions=b64decode(self.iconoptions)
self.iconoptions=ImageTk.PhotoImage(data=self.iconoptions)
self.initGUI()
def initGUI(self):
# -------------------------------------------------------------------------------
# >
# Method:
# Brief :
# Author: @KenanZhu All Right Reserved.
# -------------------------------------------------------------------------------
self.hwnd.title("KNZ_Convert")
self.hwnd.resizable(0, 0)
self.func.Move_center(self.hwnd, 400, 230)
###
icon_ico = (b'AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAADjsAAA47AAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAA'
b'AAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAEgAAABAAAAAQAA'
b'AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABIAAAAGAAAAAAAAAAAAAAAGAAAAEgAAABAAAAAQAAAAEAAAABAAAAAQAAA'
b'AEAAAABAAAAAQAAAAEAAAABIAAAAGAAAAAAAAAAAAAAAAAAAAAQAAALkAAAD3AAAA8AAAAPIAAADyAAAA8gAAAPIAAADyAAAA'
b'8gAAAPIAAADwAAAA9wAAALkAAAAAAAAAAAAAALkAAAD3AAAA8AAAAPIAAADyAAAA8gAAAPIAAADyAAAA8gAAAPIAAADwAAAA9'
b'wAAALkAAAABAAAAAAAAAAAAAAARAAAA7wAAAP8AAADyAAAA8gAAAPIAAADyAAAA8gAAAPIAAADyAAAA8gAAAPIAAAD/AAAA7w'
b'AAAA0AAAANAAAA7wAAAP8AAADyAAAA8gAAAPIAAADyAAAA8gAAAPIAAADyAAAA8gAAAPIAAAD/AAAA7wAAABEAAAAAAAAAAAA'
b'AABAAAADxAAAA8gAAAB8AAAAMAAAAEQAAABAAAAAQAAAAEAAAABEAAAAMAAAAHwAAAPIAAADxAAAADAAAAAwAAADxAAAA8gAA'
b'AB8AAAAMAAAAEQAAABAAAAAQAAAAEAAAABEAAAAMAAAAHwAAAPIAAADxAAAAEAAAAAAAAAAAAAAAEAAAAPMAAADyAAAAEAAAA'
b'AAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAQAAAA8gAAAPMAAAAMAAAADAAAAPMAAADyAAAAEAAAAAAAAAABAAAAAAAAAA'
b'AAAAAAAAAAAQAAAAAAAAAQAAAA8gAAAPMAAAAQAAAAAAAAAAAAAAAQAAAA8wAAAPIAAAARAAAAAAAAAAIAAAABAAAAAQAAAAE'
b'AAAACAAAAAAAAABEAAADwAAAA8QAAAAsAAAALAAAA8QAAAPAAAAARAAAAAAAAAAIAAAACAAAAAgAAAAEAAAACAAAAAAAAABEA'
b'AADyAAAA8wAAABAAAAAAAAAAAAAAABAAAADzAAAA8gAAABAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAEAAAAPIAA'
b'ADzAAAADAAAAAwAAADzAAAA8gAAABAAAAAAAAAAAgAAAAEAAAABAAAAAgAAAAEAAAAAAAAAEAAAAPIAAADzAAAAEAAAAAAAAA'
b'AAAAAAEAAAAPMAAADyAAAAEAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAgAAAAEAAAAAAAAAwwAAAMMAAAAAAAAAAAAAAMQAAAD'
b'DAAAAAAAAAAEAAAAAAAAABwAAAAcAAAAAAAAAAwAAAAAAAAAQAAAA8gAAAPMAAAAQAAAAAAAAAAAAAAAQAAAA8wAAAPIAAAAQ'
b'AAAAAAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAEAAADEA'
b'AAA0AAAABYAAAAAAAAAAAAAABAAAADyAAAA8wAAABAAAAAAAAAAAAAAABAAAADzAAAA8gAAABAAAAAAAAAAAAAAAAUAAAARAA'
b'AAEAAAABAAAAAQAAAAEQAAAA8AAAAPAAAAEQAAABEAAAAPAAAADwAAABIAAAAPAAAAEwAAANMAAAD/AAAAzwAAABgAAAAAAAA'
b'AEgAAAPIAAADzAAAAEAAAAAAAAAAAAAAAEAAAAPMAAADyAAAAEQAAAAAAAAADAAAAwgAAAPsAAADwAAAA8gAAAPIAAADyAAAA'
b'8wAAAPMAAADyAAAA8gAAAPMAAADzAAAA8gAAAPMAAADvAAAA8gAAAPwAAAD/AAAAzAAAAAAAAAAPAAAA8wAAAPMAAAAQAAAAA'
b'AAAAAAAAAAQAAAA8wAAAPIAAAARAAAAAAAAAAMAAADCAAAA+wAAAPAAAADyAAAA8gAAAPIAAADzAAAA8wAAAPIAAADyAAAA8w'
b'AAAPMAAADyAAAA8wAAAO8AAADzAAAA/AAAAP8AAADMAAAAAAAAAA8AAADzAAAA8wAAABAAAAAAAAAAAAAAABAAAADzAAAA8gA'
b'AABAAAAAAAAAAAAAAAAUAAAARAAAAEAAAABAAAAAQAAAAEQAAAA8AAAAPAAAAEQAAABEAAAAPAAAADwAAABIAAAAPAAAAEwAA'
b'ANMAAAD/AAAAzwAAABgAAAAAAAAAEgAAAPIAAADzAAAAEAAAAAAAAAAAAAAAEAAAAPMAAADyAAAAEAAAAAAAAAACAAAAAQAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAABAAAAxAAAANAAAAAWAAAAAAAAAA'
b'AAAAAQAAAA8gAAAPMAAAAQAAAAAAAAAAAAAAAQAAAA8wAAAPIAAAAQAAAAAAAAAAEAAAABAAAAAQAAAAEAAAACAAAAAQAAAAA'
b'AAADDAAAAwwAAAAAAAAAAAAAAwwAAAMMAAAAAAAAAAQAAAAAAAAAHAAAABwAAAAAAAAADAAAAAAAAABAAAADyAAAA8wAAABAA'
b'AAAAAAAAAAAAABAAAADzAAAA8gAAABAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAEAAAAPIAAADzAAAADAAAAAwAA'
b'ADzAAAA8gAAABAAAAAAAAAAAgAAAAEAAAABAAAAAgAAAAEAAAAAAAAAEAAAAPIAAADzAAAAEAAAAAAAAAAAAAAAEAAAAPMAAA'
b'DyAAAAEQAAAAAAAAACAAAAAQAAAAEAAAABAAAAAgAAAAAAAAARAAAA8AAAAPEAAAALAAAACwAAAPEAAADwAAAAEQAAAAAAAAA'
b'CAAAAAgAAAAIAAAABAAAAAgAAAAAAAAARAAAA8gAAAPMAAAAQAAAAAAAAAAAAAAAQAAAA8wAAAPIAAAAQAAAAAAAAAAEAAAAA'
b'AAAAAAAAAAAAAAABAAAAAAAAABAAAADyAAAA8wAAAAwAAAAMAAAA8wAAAPIAAAAQAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABA'
b'AAAAAAAABAAAADyAAAA8wAAABAAAAAAAAAAAAAAABAAAADxAAAA8gAAAB8AAAAMAAAAEQAAABAAAAAQAAAAEAAAABEAAAAMAA'
b'AAHwAAAPIAAADxAAAADAAAAAwAAADxAAAA8gAAAB8AAAAMAAAAEQAAABAAAAAQAAAAEAAAABEAAAAMAAAAHwAAAPIAAADxAAA'
b'AEAAAAAAAAAAAAAAAEQAAAO8AAAD/AAAA8gAAAPIAAADyAAAA8gAAAPIAAADyAAAA8gAAAPIAAADyAAAA/wAAAO8AAAANAAAA'
b'DQAAAO8AAAD/AAAA8gAAAPIAAADyAAAA8gAAAPIAAADyAAAA8gAAAPIAAADyAAAA/wAAAO8AAAARAAAAAAAAAAAAAAABAAAAu'
b'gAAAPcAAADwAAAA8gAAAPIAAADyAAAA8gAAAPIAAADyAAAA8gAAAPAAAAD3AAAAuQAAAAAAAAAAAAAAugAAAPcAAADwAAAA8g'
b'AAAPIAAADyAAAA8gAAAPIAAADyAAAA8gAAAPAAAAD3AAAAugAAAAEAAAAAAAAAAAAAAAAAAAAGAAAAEgAAABAAAAAQAAAAEAA'
b'AABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABIAAAAGAAAAAAAAAAAAAAAGAAAAEgAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAA'
b'ABAAAAAQAAAAEAAAABIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'EAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAA'
b'AAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAA////////////////QAGAApf0L+lAAYACgAAAAYAAAAGAAAABhdALoYQQCCGF0AghhAmQIYSpmGGEAAAhhA'
b'AAIYQAACGEAAAhhKmYYYQJkCGF0AghhBAIIYXQC6GAAAABgAAAAYAAAAFAAYACl/Qv6UABgAL///////////////8=')
icon_ico = b64decode(icon_ico)
icon_ico = ImageTk.PhotoImage(data=icon_ico)
self.hwnd.tk.call('wm', 'iconphoto', self.hwnd._w, icon_ico)
###
self.initCONVERT()
###
self.initExecCtrl()
###
self.hwnd.protocol('WM_DELETE_WINDOW',self.hwnd.quit)
self.hwnd.mainloop()
def initCONVERT(self):
# -------------------------------------------------------------------------------
# >
# Method:
# Brief :
# Author: @KenanZhu All Right Reserved.
# -------------------------------------------------------------------------------
self.Convertcards=tk.ttk.Notebook(self.hwnd)
#
# -------------------------------------------------------------------------------
self.SingleConv()
self.Convertcards.add(self.SingleFrame, text='Single Convert')
#
# -------------------------------------------------------------------------------
self.BatchConv()
self.Convertcards.add(self.BatchFrame, text='Batch Convert')
self.Convertcards.pack(side=tk.TOP, fill=tk.BOTH, expand=True, padx='0px', pady='0px')
def SingleConv(self):
# -------------------------------------------------------------------------------
# >
# Method:
# Brief :
# Author: @KenanZhu All Right Reserved.
# -------------------------------------------------------------------------------
self.SingleFrame=ttk.Frame(self.hwnd)
### Initialize of input frame
File_I_Frame=tk.LabelFrame(
self.SingleFrame,
text='Object Observation of RINEX')
File_I_Frame.pack(side=tk.TOP, fill=tk.X, padx='1px', pady='0px')
### Initialize of input box
File_I_Box=ttk.Combobox(
File_I_Frame,
width=47,
height=4,
values=('',),
textvariable=self.File_I_BoxVar)
File_I_Box.pack(side=tk.LEFT, anchor='w', padx='1px', pady='1px')
### Initialize of input Button
File_I_Bbutton=ttk.Button(
File_I_Frame,
text='...',
width=3,
command=lambda :self.func.Get_I_File(File_I_Box))
File_I_Bbutton.pack(side=tk.RIGHT, anchor='e', padx='1px', pady='1px')
def BatchConv(self):
# -------------------------------------------------------------------------------
# >
# Method:
# Brief :
# Author: @KenanZhu All Right Reserved.
# -------------------------------------------------------------------------------
self.BatchFrame=ttk.Frame(self.hwnd)
###
Files_I_Frame=tk.LabelFrame(
self.BatchFrame,
text='Objects Observation of RINEX')
Files_I_Frame.pack(side=tk.TOP, fill=tk.X, padx='1px', pady='0px')
###
Files_I_CtrlFrame=ttk.Frame(Files_I_Frame)
Files_I_CtrlFrame.pack(side=tk.RIGHT, fill=tk.Y, anchor='e', padx='1px', pady='1px')
###
Files_I_CtrlInput=ttk.Button(
Files_I_CtrlFrame,
text='...',
width=3,
command=lambda :self.func.Get_I_Files(Files_I_ShowText))
Files_I_CtrlInput.pack(side=tk.TOP, anchor='e', padx='1px', pady='1px')
Files_I_CtrlClear=ttk.Button(
Files_I_CtrlFrame,
text='x',
width=3,
command=lambda :self.func.Clear_I_Files(Files_I_ShowText))
Files_I_CtrlClear.pack(side=tk.BOTTOM, anchor='e', padx='1px', pady='1px')
###
Files_I_ShowFrame=ttk.Frame(Files_I_Frame)
Files_I_ShowFrame.pack(side=tk.LEFT, fill=tk.X, anchor='e', padx='1px', pady='1px')
###
ScrollbarX=ttk.Scrollbar(Files_I_ShowFrame,orient=tk.HORIZONTAL)
ScrollbarX.pack(side=tk.BOTTOM, fill=tk.X)
ScrollbarY=ttk.Scrollbar(Files_I_ShowFrame)
ScrollbarY.pack(side=tk.RIGHT, fill=tk.Y)
###
Files_I_ShowText=tk.Text(
Files_I_ShowFrame,
xscrollcommand=ScrollbarX.set,
yscrollcommand=ScrollbarY.set,
height=4, wrap='none')
Files_I_ShowText.pack(side=tk.LEFT, fill=tk.X, anchor='w', padx='1px', pady='1px')
ScrollbarX.config(command=Files_I_ShowText.xview)
ScrollbarY.config(command=Files_I_ShowText.yview)
def initExecCtrl(self):
# -------------------------------------------------------------------------------
# >
# Method:
# Brief :
# Author: @KenanZhu All Right Reserved.
# -------------------------------------------------------------------------------
self.ExecFrame=ttk.Frame(self.hwnd)
self.ExecFrame.pack(side=tk.TOP, fill=tk.X, padx='1px', pady='0px')
#
# -------------------------------------------------------------------------------
self.ConvOut()
#
# -------------------------------------------------------------------------------
self.ExecCtrl()
def ConvOut(self):
# -------------------------------------------------------------------------------
# >
# Method:
# Brief :
# Author: @KenanZhu All Right Reserved.
# -------------------------------------------------------------------------------
###
File_O_Frame=tk.LabelFrame(
self.ExecFrame,
text='Output directory')
File_O_Frame.pack(side=tk.TOP, fill=tk.X, padx='1px', pady='1px')
###
File_O_yn=ttk.Checkbutton(
File_O_Frame,
text='Directory',
variable=self.File_O_ynVar,
onvalue=1,
offvalue=0,
command=lambda :self.func.Enable_YN(
self.File_O_ynVar,
File_O_Box,
File_O_Button))
File_O_yn.pack(side=tk.LEFT, anchor='w', padx='1px', pady='0px')
###
File_O_Box=ttk.Combobox(
File_O_Frame,
width=36,
height=4,
values=('',),
state=tk.DISABLED,
textvariable=self.File_O_BoxVar)
File_O_Box.pack(side=tk.LEFT, anchor='w', padx='1px', pady='0px')
###
File_O_Button=ttk.Button(
File_O_Frame,
text='...',
width=3,
state=tk.DISABLED,
command=lambda :self.func.Get_O_Dir(File_O_Box))
File_O_Button.pack(side=tk.RIGHT, anchor='e', padx='1px', pady='0px')
def ExecCtrl(self):
# -------------------------------------------------------------------------------
# >
# Method:
# Brief :
# Author: @KenanZhu All Right Reserved.
# -------------------------------------------------------------------------------
CtrlButtonFrame=ttk.Frame(self.ExecFrame)
CtrlButtonFrame.pack(side=tk.TOP, fill=tk.X, padx='1px', pady='0px')
Conv_Option = ttk.Button(
CtrlButtonFrame,
image=self.iconoptions,
width=3,
command=lambda :instanceOPT(self.hwnd,self.func)
)
Conv_Option.pack(side=tk.RIGHT, padx='1px', pady='0px')
###
Conv_Button=ttk.Button(
CtrlButtonFrame,
text='Convert',
width=10,
command=lambda :self.func._Convert(
self.Pro_style,
self.File_O_ynVar,
self.File_I_BoxVar,
self.File_O_BoxVar,
self.Convertcards,
self.Exec_Progress))
Conv_Button.pack(side=tk.RIGHT, padx='1px', pady='0px')
###
Exit_button=ttk.Button(
CtrlButtonFrame,
text='Exit',
width=10,
command=self.hwnd.quit)
Exit_button.pack(side=tk.LEFT, padx='1px', pady='0px')
###
StateFrame=ttk.Frame(self.ExecFrame)
StateFrame.pack(side=tk.TOP, fill=tk.X, padx='1px', pady='4px')
self.Pro_style=ttk.Style(StateFrame)
self.Pro_style.layout(
'text.Horizontal.TProgressbar',
[
('Horizontal.Progressbar.trough',
{'children': [('Horizontal.Progressbar.pbar',{'side': 'left', 'sticky': 'ns'})],
'sticky': 'nswe'}
),
('Horizontal.Progressbar.label',{'sticky': ''})
]
)
self.Pro_style.configure('text.Horizontal.TProgressbar', text='No task.')
self.Exec_Progress=ttk.Progressbar(
StateFrame,
value=0,
length=400,
maximum=100,
mode='determinate',
style='text.Horizontal.TProgressbar')
self.Exec_Progress.pack(side=tk.LEFT)
class OPTIONS:
def __init__(self, parenthwnd, func):
# init
# -------------------------------------------------------------------------------
self.func=func
self.parenthwnd=parenthwnd
self.opthwnd=None
self.OptFrame=None
self.ExeFrame=None
self.MainFrame=None
self.I_RINEX_Box=None
self.O_RINEX_Box=None
self.initGUI()
def initGUI(self):
self.opthwnd=tk.Toplevel(self.parenthwnd)
self.opthwnd.title("Options")
self.opthwnd.resizable(0, 0)
self.func.Move_center(self.opthwnd, 310, 110)
icon_ico=(b'AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOrq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6'
b'urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v+CgoL/dnZ2/1RUVP9UVFT/VFRU/1RUVP9UVFT/VFRU/1RUVP9UVFT/VFRU'
b'/1RUVP9UVFT/VFRU/3Z2dv+CgoL/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8P'
b'Dw//Dw8P/w8PD/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6urq/+rq6v/q6'
b'ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/4KCgv92dnb/VFRU/1RUVP9UVFT/'
b'VFRU/1RUVP9UVFT/VFRU/1RUVP9UVFT/VFRU/1RUVP9UVFT/dnZ2/4KCgv/Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8P'
b'D/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6urqGAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAADq6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q'
b'6ur/goKC/3Z2dv9UVFT/VFRU/1RUVP9UVFT/VFRU/1RUVP9UVFT/VFRU/1RUVP9UVFT/VFRU/1RUVP92dnb/goKC/8PDw//Dw8P'
b'/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw/8AAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAAAAAAAAAAAAAAAAAD//wAA//8AA'
b'AAAAAAAAAAAAAAAAP//AAD/fwAAAAAAAAAAAAAAAAAA//8AAA==')
icon_ico=b64decode(icon_ico)
icon_ico=ImageTk.PhotoImage(data=icon_ico)
self.opthwnd.tk.call('wm', 'iconphoto', self.opthwnd._w, icon_ico)
self.MainFrame=ttk.Frame(self.opthwnd)
self.MainFrame.pack()
self.initOPTIONS()
self.initEXECTRL()
def initOPTIONS(self):
self.OptFrame=ttk.Frame(self.MainFrame)
self.OptFrame.pack(side=tk.TOP, fill=tk.BOTH)
#
# -------------------------------------------------------------------------------
I_FormatFrame = tk.LabelFrame(
self.OptFrame,
text='Origin Format')
I_FormatFrame.pack(side=tk.LEFT, expand=tk.YES, padx='2px')
Rnx_I_Frame=ttk.Frame(I_FormatFrame)
Rnx_I_Frame.pack(side=tk.TOP, fill=tk.X, pady='2px', padx='2px')
I_RINEX = ttk.Label(
Rnx_I_Frame,
text='RINEX:',
style='I_RINEX.TLabel')
I_RINEX.pack(side=tk.LEFT)
self.I_RINEX_Box = ttk.Combobox(
Rnx_I_Frame,
width=10,
values=I_RINEX_BoxList)
self.I_RINEX_Box.set(I_RINEX_BoxList[I_Format_Rnx_List])
self.I_RINEX_Box.pack(side=tk.RIGHT)
Rtc_I_Frame=ttk.Frame(I_FormatFrame)
Rtc_I_Frame.pack(side=tk.TOP, fill=tk.X, pady='2px', padx='2px')
I_RTCM = ttk.Label(
Rtc_I_Frame,
text='RTCM :',
style='I_RTCM.TLabel')
I_RTCM.pack(side=tk.LEFT)
I_RTCM_BoxList = ['2.xx', '3.xx', '4.xx']
I_RTCM_Box = ttk.Combobox(
Rtc_I_Frame,
width=10,
state=tk.DISABLED,
values=I_RTCM_BoxList)
I_RTCM_Box.set(I_RTCM_BoxList[0])
I_RTCM_Box.pack(side=tk.RIGHT)
#
# -------------------------------------------------------------------------------
O_FormatFrame = tk.LabelFrame(
self.OptFrame,
text='Target Format')
O_FormatFrame.pack(side=tk.RIGHT, expand=tk.YES, padx='2px')
Rnx_O_Frame=ttk.Frame(O_FormatFrame)
Rnx_O_Frame.pack(side=tk.TOP, fill=tk.X, pady='2px', padx='2px')
O_RINEX=ttk.Label(
Rnx_O_Frame,
text='RINEX:',
style='I_RINEX.TLabel')
O_RINEX.pack(side=tk.LEFT)
self.O_RINEX_Box=ttk.Combobox(
Rnx_O_Frame,
width=10,
values=I_RINEX_BoxList)
self.O_RINEX_Box.set(O_RINEX_BoxList[O_Format_Rnx_List])
self.O_RINEX_Box.pack(side=tk.RIGHT)
Rtc_O_Frame=ttk.Frame(O_FormatFrame)
Rtc_O_Frame.pack(side=tk.TOP, fill=tk.X, pady='2px', padx='2px')
O_RTCM=ttk.Label(
Rtc_O_Frame,
text='RTCM :',
style='I_RTCM.TLabel')
O_RTCM.pack(side=tk.LEFT)
O_RTCM_BoxList=['2.xx', '3.xx', '4.xx']
O_RTCM_Box=ttk.Combobox(
Rtc_O_Frame,
width=10,
state=tk.DISABLED,
values=O_RTCM_BoxList)
O_RTCM_Box.set(I_RTCM_BoxList[0])
O_RTCM_Box.pack(side=tk.RIGHT)
def initEXECTRL(self):
self.ExeFrame=ttk.Frame(self.MainFrame)
self.ExeFrame.pack(side=tk.TOP, fill=tk.X, pady='2px', padx='2px')
Cancel_Button = ttk.Button(
self.ExeFrame,
text='Cancel',
command=self.opthwnd.destroy)
Cancel_Button.pack(side=tk.LEFT)
Confirm_Button = ttk.Button(
self.ExeFrame,
text='Confirm',
command=lambda :[
self.Get_IO_Format(),
self.opthwnd.destroy()
])
Confirm_Button.pack(side=tk.RIGHT)
def Get_IO_Format(self):
global I_Format_Rnx_List, O_Format_Rnx_List
I_Format_Rnx_List=I_RINEX_BoxList.index(self.I_RINEX_Box.get())
O_Format_Rnx_List=O_RINEX_BoxList.index(self.O_RINEX_Box.get())
if __name__ == "__main__":
root=tk.Tk()
call=CALLBACK()
initGUI=MAINGUI(root, call)