Source code for misc

'''
Miscellaneous user interface utilities for

    - getting the screen size
    - selecting files or directories.
      If nothing or a non-existing file/direcoty is selected, the return is "0". 
      Otherwise the file/directory is returned.
    - Selection from a list.
    - waitbar
    - listbox

'''

'''
author: Thomas Haslwanter
'''

import os
import matplotlib.pyplot as plt
#plt.switch_backend('agg')

import sys
from scipy.signal import savgol_filter

import tkinter 
import tkinter.filedialog as tkf
    
[docs]def get_screensize(): ''' Get the height and width of the screen. Parameters ---------- None Returns ------- width : int width of the current screen height: int height of the current screen Examples -------- >>> (width, height) = skinematics.ui.get_screensize() ''' try: root = tkinter.Tk() (screen_w, screen_h) = (root.winfo_screenwidth(), root.winfo_screenheight()) root.destroy() return (screen_w, screen_h) except tkinter.TclError: print('No display available!') return (0, 0)
[docs]def progressbar(it, prefix = "", size = 60): ''' Shows a progress-bar on the commandline. This has the advantage that you don't need to bother with windows managers. Nifty coding! Parameters ---------- it : integer array index variable prefix : string Text preceding the progress-bar size : integer Length of progress-bar Examples -------- >>> import time >>> for ii in progressbar(range(50), 'Computing ', 25): >>> #print(ii) >>> time.sleep(0.05) ''' count = len(it) def _show(_i): # Helper function to print the desired information line. x = int(size*_i/count) sys.stdout.write("%s[%s%s] %i/%i\r" % (prefix, "#"*x, "."*(size-x), _i, count)) # sys.stdout.flush() _show(0) for i, item in enumerate(it): yield item _show(i+1) sys.stdout.write("\n") sys.stdout.flush()
[docs]def get_file(FilterSpec='*', DialogTitle='Select File: ', DefaultName=''): ''' Selecting an existing file. Parameters ---------- FilterSpec : query-string File filters DialogTitle : string Window title DefaultName : string Can be a directory AND filename Returns ------- filename : string selected existing file pathname: string selected path Examples -------- >>> (myFile, myPath) = skinematics.ui.getfile('*.py', 'Testing file-selection', 'c:\\temp\\test.py') ''' root = tkinter.Tk() root.withdraw() fullInFile = tkf.askopenfilename(initialfile=DefaultName, title=DialogTitle, filetypes=[('all files','*'), ('Select', FilterSpec)]) # Close the Tk-window manager again root.destroy() if not os.path.exists(fullInFile): return (0, 0) else: print('Selection: ' + fullInFile) dirName = os.path.dirname(fullInFile) fileName = os.path.basename(fullInFile) return (fileName, dirName)
[docs]def save_file(FilterSpec='*',DialogTitle='Save File: ', DefaultName=''): ''' Selecting an existing or new file: Parameters ---------- FilterSpec : string File filters. DialogTitle : string Window title. DefaultName : string Can be a directory AND filename. Returns ------- filename : string Selected file. pathname : string Selecte path. Examples -------- >>> (myFile, myPath) = skinematics.ui.savefile('*.py', 'Testing file-selection', 'c:\\temp\\test.py') ''' root = tkinter.Tk() root.withdraw() outFile = tkf.asksaveasfile(mode='w', title=DialogTitle, initialfile=DefaultName, filetypes=[('Save as', FilterSpec)]) # Close the Tk-window manager again root.destroy() if outFile == None: (fileName, dirName) = (0,0) else: fullOutFile = outFile.name print('Selection: ' + fullOutFile) dirName = os.path.dirname(fullOutFile) fileName = os.path.basename(fullOutFile) return (fileName, dirName)
[docs]def get_dir(DialogTitle='Select Directory', DefaultName='.'): ''' Select a directory Parameters ---------- DialogTitle : string Window title DefaultName : string Can be a directory AND filename Returns ------- directory : string Selected directory. Examples -------- >>> myDir = skinematics.ui.getdir('c:\\temp', 'Pick your directory') ''' root = tkinter.Tk() root.withdraw() fullDir = tkf.askdirectory(initialdir=DefaultName, title=DialogTitle) # Close the Tk-window manager again root.destroy() if not os.path.exists(fullDir): return 0 else: print('Selection: ' + fullDir) return fullDir
if __name__ == "__main__": # Test functions width, height = get_screensize() print('Your screen is {0} x {1} pixels.'.format(width, height)) ''' #import time #for ii in progressbar(range(50), 'Computing ', 25): ##print(ii) #time.sleep(0.05) (myFile, myPath) = get_file('*.eps', 'Testing file-selection', r'c:\temp\test.eps') if myFile == 0: print(0) else: print('File: %s, Path: %s' % (myFile, myPath)) (myFile, myPath) = save_file('*.txt', 'Testing saving-selection', r'c:\temp\test.txt') myDir = get_dir() print(myDir) items = ['Peter', 'Paul', 'Mary'] selected = listbox(items*4) if selected == '': print('No selection made.') else: print('You have selected {0}'.format(selected)) import numpy as np import pandas as pd x = np.arange(5) y = np.random.randn(5,3) s = pd.Series(x) df = pd.DataFrame(y) z = 'abc' selVal, selName = selectPlotVar(sys._getframe()) #selected = selectPlotVar() curFrame = sys._getframe() varList = curFrame.f_locals.keys() ndList = [var for var in varList if type(curFrame.f_locals[var])==np.ndarray] dfList = [var for var in varList if type(curFrame.f_locals[var])==pd.core.frame.DataFrame] seriesList = [var for var in varList if type(curFrame.f_locals[var])==pd.core.series.Series] fullList = ndList+dfList+seriesList selected = listbox(fullList) print(selName) print(selVal) root = tkinter.Tk() app = Demo1(root, sys._getframe()) root.mainloop() '''